【问题标题】:Pass array as parameter to proc in TASM?将数组作为参数传递给TASM中的proc?
【发布时间】:2015-08-30 11:05:54
【问题描述】:

我正在尝试在 TASM 中创建一个接受数组作为参数的 proc。问题是,结果一团糟。这是代码:

TextParameter       equ [bp+8]
MenuColorParameter  equ [bp+6]
RowToPrint          equ [bp+4]
PrintBar    proc
            push bp
            mov bp, sp
            mov dh, RowToPrint
            mov dl, 0
            mov bh, 0
            mov ah, 2
            int 10h
            mov si, 0
            mov cx, 1
    @@Print:
            mov ah, 9
            mov al, [TextParameter+si]
            mov bl, [MenuColorParameter+si]
            int 10h
            mov ah, 2
            inc dl
            int 10h
            inc si
            cmp si, MENU_LEN ; const in DATASEG
            jc @@Print
            mov ah, 2
            mov bh, 0
            mov dl, 0
            mov dh, 2
            int 10h
            pop bp
            ret 6
PrintBar    endp

当通过 DATASEG 引用数组时(如 mov al, Array[si]),proc 按预期工作。

【问题讨论】:

    标签: arrays tasm


    【解决方案1】:

    我假设您按地址(即它们的偏移量)传递数组,因为每个参数似乎是 2 个字节。如果是这样,您需要先将该地址加载到寄存器中,然后添加si 并再次从内存中读取:

    mov bx, TextParameter      ; expands to mov bx,[bp+8]
    mov al, [bx+si]
    mov bx, MenuColorParameter ; expands to mov bx,[bp+6]
    mov bl, [bx+si]
    

    【讨论】:

    • 现在什么都不打印了,我猜这是进展吗?
    • 仅仅看到这个过程很难说为什么会这样。在调试器中单步执行代码应该可以帮助您更快地发现任何剩余的问题。
    【解决方案2】:

    除了迈克尔的回答,我发现了问题 - int 10h ah=9 和 int 10h ah=2 期望 bh 作为视频页码。分配 al 和 bl 后,我需要 mov bh, 0。 @@Print 标签现在是这样的:

    @@Print:
            mov ah, 9
            mov bx, TextParameter
            mov al, [bx+si]
            mov bx, MenuColorParameter
            mov bl, [bx+si]
            mov bh, 0
            int 10h
            mov ah, 2
            inc dl
            int 10h
            inc si
            cmp si, MENU_LEN ; const in DATASEG
            jc @@Print
    

    【讨论】:

      猜你喜欢
      • 2020-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多