Assemblyx86用用户输入填充数组

时间:2014-06-11 18:30:57

标签: arrays assembly

我有这部分代码,我试图用用户输入填充一个数组(名为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

1 个答案:

答案 0 :(得分:2)

AHEAX的一部分。由于您和/或程序(CALL ...)已更改EAX,因此AH也已更改。