我正在学习汇编语言的分工.根据我正在学习的书,idiv操作的结果放在eax中,其余部分放在edx中.
书中的练习是number = result % divisor在装配中实施.
我原以为这相当于正常的除法运算,除了edx就是结果.
然而这并没有起作用,而edx似乎又回来了垃圾.
为什么?你如何在汇编中实现上面的伪代码?
我通过汇编代码使用printf.我注意到在下面的示例中,如果我省略了预期的参数,则会打印垃圾.
.386
.model flat, c
.stack 100h
printf PROTO arg1:Ptr Byte, printlist:VARARG
.data
msg3fmt byte 0Ah,"%s",0Ah,"test output",0Ah,0
.code
main proc
INVOKE printf, ADDR msg3fmt
ret
main endp
end
Run Code Online (Sandbox Code Playgroud)
我的问题是为什么?是否有一个设置的内存地址printf使用期望找到一个参数?为什么没有任何参数被打印出来?
我有以下汇编代码
.386
.model flat, c
.stack 100h
printf PROTO arg1:Ptr Byte, printlist:VARARG
scanf PROTO arg2:Ptr Byte, printlist:VARARG
.data
in1fmt byte "%d",0
msg2fmt byte 0Ah,"%s%d",0
msg3 byte "EAX is : ",0
number sdword 10
.code
main proc
mov eax, 90
INVOKE printf, ADDR msg2fmt, ADDR msg3, eax
INVOKE printf, ADDR msg2fmt, ADDR msg3, eax
mov eax, number
INVOKE printf, ADDR msg2fmt, ADDR msg3, eax
INVOKE printf, ADDR msg2fmt, ADDR msg3, eax
sub eax, 1
INVOKE printf, ADDR msg2fmt, ADDR msg3, eax …Run Code Online (Sandbox Code Playgroud)