第二次的汇编作业

由键盘输入一串整数(length <= 9),将该串转换为整数,并分别按16进制和10进制输出。

整数的长度为9,这样就超过了16位,单纯用8086的运算已经不能满足,加法的进位就会丢失,

而乘除法很可能会出现overflow.

所以要用到32位寄存器,这样就用到386指令.

如果不用386指令,也可以用两个寄存器对高16位和低16位分别进行操作.

下面是用386指令的源代码

ENTER   MACRO
       MOV   DL,0AH
       MOV   AH,2H
       INT   21H
       MOV   DL,0DH
       MOV   AH,2H
       INT   21H
        ENDM
.model  hex

.386

.data
msg   db    'Input numbers (length<=9):$'

.stack
    db    100 dup(?)
.code

main   proc   far

;*********************************
start: 
    push  ds
    mov   ax,0
    push  ax  
    mov   ax,@data
    mov   ds,ax  
    mov   dx,offset msg
    mov   ah,9
    int   21h
 
    call  rec
    enter
    call  tohex
    enter
    call  dec1
    enter
   
    ret  
main  endp
;-----------------------------------     
rec   proc   near        ;子程序rec是用来接收一个长度小于9的整数
    mov   ebx,0        ;并把它放入ebx中
  
newnum:
    mov   ah,01
    int   21h
    sub   al,30h
    jl   exit
    cmp   al,9d
    jg   exit
    cbw
    xchg  eax,ebx
    mov   ecx,10d
    mul   ecx
    xchg  eax,ebx
  
    add   ebx,eax
    jmp   newnum
exit:
    ret
rec   endp

;------------------------------------
tohex  proc   near           ;子程序tohex是把ebx中的数用16进制输出
    mov   ch,8
rotate:
    mov   cl,4
    rol   ebx,cl
    mov   al,bl
    and   al,0fh
    add   al,30h
    cmp   al,3ah
    jl   print
    add   al,7h
print:
    mov   dl,al
    mov   ah,2h
    int    21h
    dec   ch
    jnz   rotate
    ret
tohex  endp

;----------------------------------
dec1  proc  near            ;dec1是转化为十进制输出
    mov   ecx,100000000d
    call  todec
    mov   ecx,10000000d
    call  todec
    mov   ecx,1000000d
    call  todec
    mov   ecx,100000d
    call    todec
    mov   ecx,10000d
    call  todec
    mov   ecx,1000d
    call  todec
    mov   ecx,100d
    call  todec
    mov   ecx,10d
    call    todec
    mov   ecx,1d
    call  todec
    ret   
;--------------------------------
todec  proc  near
    mov   eax,ebx
    mov   edx,0
    div   ecx
    mov   ebx,edx
    mov   dx,ax
    add   dl,30h
    mov   ah,02h
    int   21h
    ret
todec  endp
dec1  endp

;----------------------------
end   main

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值