这是我的问题
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
答案 0 :(得分:0)
call arr
没有做你想做的事情,它标记为arr
而不是用作指针。您需要括号:call [arr]
mov [bx+count],ax
也没有做你想做的事。它将ax
存储在bx
标签之后的内存count
字节中,而不是将其用作变量。不幸的是x86不能一步完成,所以你必须写一些像:
mov si, [count]
mov [bx+si], ax
快速浏览一下,没有其他问题,但如果代码仍无效,请学会使用调试器逐步完成代码。