0

我有以下汇编代码。我已经在我的DS. 稍后在代码中,我进入BX要访问的数组元素的索引号。该PRINT_CHAR过程只是通过AL串行端口发送数据以显示在屏幕上。但由于某种原因,我似乎无法访问数组元素。它只是给了我一些虚假的价值。print_char过程肯定没问题。我已经尝试了两种我知道的方法来访问数组。任何帮助,将不胜感激。谢谢!

    DATA_SEG    SEGMENT
ARRAY       DB  '1','2','3','1','2','3','4','5','6','4','5','6'
bottom2     DB  '7','8','9','7','8','9','*','0','#','*','0','#'
    DATA_SEG    ENDS



    topnumbers:
    cmp BX, 12
    jge bottom_numbers
    MOV AL,DS:ARRAY[BX] ; Stores character in AL (?)
    jmp NUMBERS

    bottom_numbers:
    sub BL, 12d
            LEA SI, bottom2
            ADD SI, BX
            MOV AL, [SI]

    NUMBERS:
    XOR AH, AH
    CALL FAR PTR PRINT_CHAR
4

1 回答 1

1

如果您正在创建 .exe 文件,您有责任将段寄存器设置为相应的值。类似的东西(但也要检查你的秘密汇编语法):

    mov  ax, DATA_SEG
    mov  ds, ax

此外,对于这样的小程序,.COM 可执行格式更容易处理,因为 DOS 会为你设置所有的段寄存器,你永远不需要使用远指针。

于 2013-10-21T07:50:59.763 回答