汇编输出超过2559的数

  • div:被除数的高16位存放在DX中,低16位存放在AX中,一般情况下只用AX,把DX置零,得到的结果AX中存放商,DX存放余数。
    被除数存放在AX中,得到的结果商存在AL中,余数存在AH中。
  • mul:1位存在AX中,另一位存在其他的16位寄存器中,mul 16位寄存器,得到的结果高16位存放在DX中,低16位存放在AX中,一般情况下用到的是AX。
    一位存放在AL中,得到的结果存在AX中。

入口参数为DX和SI,DX中存放的是要输出的数值。
SI为当前偏移值,除10得到的余数倒着存放在dval中

RESULT DW ?
dval db 5 dup(?)
dlen=$-result ;当前偏移值

output proc ; 输入参数dx,存要输出的结果    
     push ax
     push cx    
  p1:     
     dec si
     mov ax,dx
     mov dx,0
     mov cx,10
     div cx
     xchg ax,dx
     mov [si],al
     cmp dx,0
     jne p1     
  p3:
   mov dl,[si]
   add dl,48
   mov ah,2
   int 21h
   add si,1
   cmp si,dlen
   jb p3
     jmp p4
 p4:    
     pop cx
     pop ax   
    ret
 output endp


;主函数中
mov si,offset result
 mov dx,[si]
 mov si,offset dlen
 call output

;输出较大的数值
DATAS SEGMENT
    ;此处输入数据段代码  
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    
    mov ax,14858
    call output
    
    MOV AH,4CH
    INT 21H
    
    output proc;AX作为入口参数,DX存高16位,AX存低16位
    push bx
    push cx
    push dx
    
    mov bx,10
    mov cx,0
 A1:
    mov dx,0
    div bx;商在AX中,余数在DX中
    push dx
    inc cx
    cmp ax,0
    jne A1
 A2:
 	pop dx
 	add dl,48
 	mov ah,2
 	int 21h
 	loop A2
 	
    pop dx
    pop cx
    pop bx
    ret 
    output endp
      
CODES ENDS
    END START






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的汇编程序,可以实现键盘输入不超过5位的整,计算并输出的各位之和: ``` section .data prompt db "请输入一个超过5位的整:", 0 sum_prompt db "各位之和为:", 0 newline db 0x0a, 0x0d, 0 input_buffer times 6 db 0 ; 存储用户输入的字符串,每个字符占用一个字节,最后一个字节存储null字符 sum db 0 ; 存储各位之和 section .text global _start _start: ; 显示提示信息 mov eax, 4 ; 4代表sys_write函 mov ebx, 1 ; 1代表标准输出 mov ecx, prompt ; 存储了提示信息的字符串 mov edx, 27 ; 字符串的长度 int 0x80 ; 调用系统调用 ; 读取用户输入 mov eax, 3 ; 3代表sys_read函 mov ebx, 0 ; 0代表标准输入 mov ecx, input_buffer ; 存储用户输入的字符串的地址 mov edx, 6 ; 输入的最大长度是5位整一个null字符 int 0x80 ; 调用系统调用 ; 计算各位之和 mov bl, [input_buffer + 1] ; 把第一个字符转换为整 mov cl, [input_buffer + 2] ; 把第二个字符转换为整 add bl, cl ; 将第一个和第二个字符转换为的整相加 mov cl, [input_buffer + 3] ; 把第三个字符转换为整 add bl, cl ; 将第三个字符转换为的整加到前两个字符的和中 mov cl, [input_buffer + 4] ; 把第四个字符转换为整 add bl, cl ; 将第四个字符转换为的整加到前三个字符的和中 mov cl, [input_buffer + 5] ; 把第五个字符转换为整 add bl, cl ; 将第五个字符转换为的整加到前四个字符的和中 mov [sum], bl ; 把各位之和存储到sum变量中 ; 显示各位之和 mov eax, 4 ; 4代表sys_write函 mov ebx, 1 ; 1代表标准输出 mov ecx, sum_prompt ; 存储了各位之和的提示信息的字符串 mov edx, 14 ; 字符串的长度 int 0x80 ; 调用系统调用 mov eax, 4 ; 4代表sys_write函 mov ebx, 1 ; 1代表标准输出 mov ecx, sum ; 存储了各位之和的变量 add ecx, '0' ; 把各位之和转换为字符 mov edx, 1 ; 字符串的长度为1 int 0x80 ; 调用系统调用 mov eax, 4 ; 4代表sys_write函 mov ebx, 1 ; 1代表标准输出 mov ecx, newline ; 存储了换行符和回车符的字符串 mov edx, 2 ; 字符串的长度为2 int 0x80 ; 调用系统调用 ; 退出程序 mov eax, 1 ; 1代表sys_exit函 xor ebx, ebx ; 返回值为0 int 0x80 ``` 请将以上代码保存为sum.asm文件,使用nasm编译器进行编译和链接,命令如下所示: ``` nasm -f elf32 sum.asm -o sum.o ld -m elf_i386 sum.o -o sum ``` 编译完成后,运行sum可执行文件,即可进行输入和计算,程序将会输出各位之和。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值