小编Son*_*ell的帖子

如何在程序集中实现mod运算符

我正在学习汇编语言的分工.根据我正在学习的书,idiv操作的结果放在eax中,其余部分放在edx中.

书中的练习是number = result % divisor在装配中实施.

我原以为这相当于正常的除法运算,除了edx就是结果.

然而这并没有起作用,而edx似乎又回来了垃圾.

为什么?你如何在汇编中实现上面的伪代码?

x86 assembly

6
推荐指数
1
解决办法
4万
查看次数

为什么省略printf打印垃圾的参数?

我通过汇编代码使用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使用期望找到一个参数?为什么没有任何参数被打印出来?

c x86 assembly printf

1
推荐指数
1
解决办法
282
查看次数

EAX在被访问时发生变化

我有以下汇编代码

    .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)

x86 assembly masm

0
推荐指数
1
解决办法
187
查看次数

标签 统计

assembly ×3

x86 ×3

c ×1

masm ×1

printf ×1