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,则退出循环
@RobertPounder
HLT
!=<代码>非
NOT
对其参数进行位补码(
AL
)。此外,
INC AL
也不是有条件的。它只是增加
AL
,而不管它是否为0。。。和
MOV[BX],AL
AL
的值存储到
BX
中保存的地址中,而不是“1或AL的值”。。。