Assembly 需要帮助了解此程序的功能-(汇编程序)
我是汇编新手,需要帮助了解程序的功能:Assembly 需要帮助了解此程序的功能-(汇编程序),assembly,x86,reverse-engineering,Assembly,X86,Reverse Engineering,我是汇编新手,需要帮助了解程序的功能: MOV SI, 0x0210 MOV BX, 0x0220 MOV CX, 0x5 L1: MOV AL, [SI] NOT AL INC AL MOV [BX], AL INC BX INC SI LOOP L1 HLT 有人能告诉我地址开头的“0x..”是什么吗 (所有数字均为十六进制) 非常感谢 MOV SI,指向SI中地址的0x0210链接 MOV BX,指向BX中地址的0x0220链接 MOV CX,0x
MOV SI, 0x0210
MOV BX, 0x0220
MOV CX, 0x5
L1: MOV AL, [SI]
NOT AL
INC AL
MOV [BX], AL
INC BX
INC SI
LOOP L1
HLT
有人能告诉我地址开头的“0x..”是什么吗
(所有数字均为十六进制)
非常感谢 MOV SI,指向SI中地址的0x0210链接 MOV BX,指向BX中地址的0x0220链接 MOV CX,0x5将5放入CX L1:MOV AL[SI](假设L1也是跳跃的标签)[SI]指向x210处的值 如果AL=/=0退出循环,则不是AL 如果为0,则INC AL Make AL=1 MOV[BX],AL将1或AL的值放入x220中 INC BX将指针更改为下一个字符串(假定此处为字节) 我也是 循环L1返回到L1
HLT…正如您自己所指出的,数字文字是以十六进制为基数的。
0x
是表示数字应解释为十六进制的常用前缀。有些汇编程序使用后缀h
(如1234h
),有些汇编程序支持这两种变体
循环
指令将CX
减少1,如果CX
!=0所以这个程序中的循环将运行5次
在每次迭代期间,从地址
0x210
处开始的内存块加载一个字节。然后该值被求反((~x)+1==-x
),结果存储在从地址0x220
开始的内存块中。源地址和目标地址都会递增,以便它们在循环的下一次迭代中指向相应数组中的下一个字节。好吧,它不做的一件事是组装0x
引入以十六进制表示的数值常量(即基数16)。这看起来有点像是试图对一个字节序列进行2s补码…@twalberg:它确实是用nasm进行汇编的。@Jester编辑之前的原作迈克尔没有…not AL;如果AL=/=0,则退出循环
@RobertPounderHLT
!=<代码>非NOT
对其参数进行位补码(AL
)。此外,INC AL
也不是有条件的。它只是增加AL
,而不管它是否为0。。。和MOV[BX],AL
将AL
的值存储到BX
中保存的地址中,而不是“1或AL的值”。。。