我有这部分代码,我试图用用户输入填充一个数组(名为array_number)。出于这个原因,我使用循环。在我使用循环之前 MOV AH,类型array_number,因为array_number是SWORD类型,AH = 2。 当我在调试时,我看到厕所AH内部出于某种原因变为0而我无法找出原因,因为我在循环内部使用它的唯一时间是ADD counter2,AH(计数器是BYTE类型)。 这是问题出现的部分代码,谢谢你的时间。
mov ECX, table_size ; ECX=8
mov AH, TYPE array_number ; type is SWORD so AH=2
mov EBX, offset array_number ;
L1:
mov EDX, OFFSET string1 ; output
CALL WriteString ; output
ADD counter, 1d ; output
MOVZX EAX, counter ; output
CALL WriteDec ; output
mov EDX, OFFSET string2 ; output
CALL WriteString ; output
CALL ReadDec ; input
movzx EDI,counter2 ; counter 2 goes like 0...2...4...6
ADD EBX,EDI ;
MOV [EBX], EAX ; fill array
add counter2, AH ; counter + 2 <------why ah goes 0?
CALL Crlf
LOOP L1
编辑:对于可能会检查它的人来说,这个是正确的数组填充。
mov ECX, table_size ; ECX=8
mov EDI, 0d
L1:
mov EBX, offset array_number ;
mov EDX, OFFSET string1 ; output
CALL WriteString ; output
ADD counter, 1d ; output
MOVZX EAX, counter ; output
CALL WriteDec ; output
mov EDX, OFFSET string2 ; output
CALL WriteString ; output
CALL ReadDec ; input
ADD EBX,EDI ;
ADD EDI, type array_number
MOV [EBX], EAX ; fill array
CALL Crlf
LOOP L1
答案 0 :(得分:2)
AH
是EAX
的一部分。由于您和/或程序(CALL ...
)已更改EAX,因此AH也已更改。