我是汇编程序的新手,我需要帮助才能找到该程序的功能:
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 .."在地址的开头?
(所有数字均为HEX)。
非常感谢!!
答案 0 :(得分:0)
MOV SI,0x0210链接到SI中的地址
MOV BX,0x0220链接到BX中的地址
MOV CX,0x5将5放入CX
L1:MOV AL,[SI](L1也被认为是跳跃的标签)[SI]指向x210的值
NOT AL如果AL = / = 0退出循环
INC AL如果为0则使AL = 1
MOV [BX],AL将1或AL的值放入x220
INC BX将指针更改为下一个字符串(假设它们是这里的字节)
INC SI ^相同
LOOP L1回到L1
HLT ......
答案 1 :(得分:0)
正如您已经注意到的那样,数字文字是以十六进制为基础的。 0x
是一个常见的前缀,用于表示数字应解释为十六进制。有些汇编程序使用后缀 h
代替(如1234h
),有些则支持这两种变体。
如果LOOP
!= 0,CX
指令会将CX
减少1并跳转到给定地址。因此,此程序中的循环将运行5次。
在每次迭代期间,从地址0x210
开始的一块内存加载一个字节。然后取消该值((~x)+1 == -x
),并将结果存储在从地址0x220
开始的内存块中。源地址和目标地址都会递增,以便它们在循环的下一次迭代中指向相应数组中的下一个字节。