无法访问阵列数据x86程序集

时间:2013-10-21 06:47:38

标签: arrays assembly x86

我有以下汇编代码。我在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

1 个答案:

答案 0 :(得分:1)

如果要创建.exe文件,则负责将段寄存器设置为相应的值。像(但检查你的秘密汇编语法):

    mov  ax, DATA_SEG
    mov  ds, ax

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