【问题标题】:Print quotient and remainder in NASM在 NASM 中打印商和余数
【发布时间】:2015-10-13 18:00:54
【问题描述】:

我正在学习本教程 (http://www.tutorialspoint.com/assembly_programming/assembly_arithmetic_instructions.htm) 并编写这段代码。我喜欢同时打印商和余数,但我没有得到想要的结果。

这是代码:

   section .text
       global _start    

    _start:             
       mov  al,9
       mov  bl,2
       div  bl

       mov bl, al
       add bl, byte '0'
       mov [res], byte bl
       mov bl, ah
       add bl, byte '0'
       mov [tm], byte bl



       mov  ecx,msg
       mov  edx, len
       mov  ebx,1   ;file descriptor (stdout)
       mov  eax,4   ;system call number (sys_write)
       int  0x80    ;call kernel

       mov  ecx,res
       mov  edx,1
       mov  ebx,1   ;file descriptor (stdout)
       mov  eax,4   ;system call number (sys_write)
       int  0x80    ;call kernel

       mov  ecx,msg2
       mov  edx,len2
       mov  ebx,1   ;file descriptor (stdout)
       mov  eax,4   ;system call number (sys_write)
       int  0x80    ;call kernel

       mov  ecx,tm
       mov  edx,1
       mov  ebx,1   ;file descriptor (stdout)
       mov  eax,4   ;system call number (sys_write)
       int  0x80    ;call kernel



       mov  eax,1   ;system call number (sys_exit)
       int  0x80    ;call kernel

    section .data
    msg db "The result is:", 0xA,0xD 
    len equ $- msg
    msg2 db 0xA,0xD,"Remainder is:", 0xA,0xD
    len2 equ $- msg   

    segment .bss
    tm resb 1
    res resb 1

结果:

The result is:
4
Remainder is:
141% 

知道哪里出了问题吗?

【问题讨论】:

  • 不应该是len2 equ $- msg2(注意msg后面的2)吗?
  • 天哪!你完全正确!谢谢

标签: assembly nasm division


【解决方案1】:

% 宏打印 2 移动 eax,4 移动 ebx,1 移动 ecx,%1 移动 edx,%2 诠释 80 小时 %end宏

%宏读取 2 移动 eax, 3 移动 ebx, 2 移动 ecx,%1 移动 edx, %2
诠释 80 小时 %end宏

部分.data
userMsg db '请输入一个数字:' lenUserMsg 等于 $-userMsg
usermsg1 db '输入第二个数字:' lenusermsg1 等于 $-usermsg1 商 db ' 商是 : ' quotientlength equ $-商
余数db'余数为:' 剩余长度等于 $-remainder
len EQU 16

section .bss ;未初始化的数据 n resb len n1 分辨率

qtnt resb len r 分辨率

section .text ;代码段 全局 _start
_开始:

打印 userMsg,lenUserMsg 读 n,len 打印 usermsg1,lenusermsg1 读取 n1,len

mov al,[n] sub al,'0'

mov bl,[n1] sub bl,'0'

div bl 添加 al,'0' 添加 dl,'0' mov [qtnt],al

打印商,商长度 打印 qtnt,len

mov [r],dl

打印余数,余数长度 打印 r,len

退出: 移动 eax, 1 移动 ebx, 0 整数 80h

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 2016-01-07
  • 2017-04-01
  • 2016-01-21
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
相关资源
最近更新 更多