将函数的偏移量放在数组中,然后逐个调用函数

时间:2013-10-22 21:15:59

标签: assembly x86 nasm

这是我的问题

Q)编写一个函数“addtoset”,它接受函数的偏移量 在一个最多可容纳8的数组中记住此偏移量 偏移。如果集合中已有8个偏移,则不执行任何操作。 写另一个函数“callset”,调用所有函数 这一套一个接一个。

我最初尝试使用三个函数,你可以在我的代码中看到 (我正在使用NASM 16位架构)

这是我的代码,它汇编但不显示任何输出,我该如何解决?

org 100h
segment data
arr dw 0,0,0
count dw 0
section .text
        mov bx , arr; assigning address of arr to bx

        mov ax , fun1;moving offset of fun1 to ax
        call addtoast

        mov ax , fun2;moving offset of fun2 to ax
        call addtoast

        mov ax , fun3;moving offset of fun3 to ax
        call addtoast

        call callset

end:
MOV AH,4CH
INT 21H

callset:;this function will call other functions
        call arr
        call [arr+2]
        call [arr+4]
ret

addtoast:;this function puts offset into array
        mov [bx+count], ax
        add [count], word 2
ret

fun1:;prints 1
        mov dx , '1'
        mov ah , 2h
        int 21h
ret

fun2:;prints 2
        mov dx , '2'
        mov ah , 2h
        int 21h
ret

fun3:;prints 3
        mov dx , '3'
        mov ah , 2h
        int 21h
ret

1 个答案:

答案 0 :(得分:0)

call arr没有做你想做的事情,它标记为arr而不是用作指针。您需要括号:call [arr]

mov [bx+count],ax也没有做你想做的事。它将ax存储在bx标签之后的内存count字节中,而不是将其用作变量。不幸的是x86不能一步完成,所以你必须写一些像:

mov si, [count]
mov [bx+si], ax

快速浏览一下,没有其他问题,但如果代码仍无效,请学会使用调试器逐步完成代码。