8086汇编 计算输入两个十进制数之和用16进制输出//输入两个十六进制数之和用10进制输出

来源:互联网 发布:守望先锋安卓数据查询 编辑:程序博客网 时间:2024/05/22 05:52




把两个题目放在了一起,输入H(D)+数字+空格+数字+空格就会看到和
可以参考输入示范的截图
输入H代表你输入16进制数,以10进制输出和
输入D代表你输入10进制数,以16进制输出和
此程序可以接受加数很大只要最后和在16位寄存器放得下就行

data segment;计算两个在和在65535内的十进制数或16进制数的和,这两个数最多可以是五位十进制数

db 10 dup(0);用于暂时存放输入的数
flag0 db 0;flag0==2标志着输入数的结束
flag1 db 0;flag1用来存放'D'或者'H'用来判断用户输的是十进制还是十六进制
table dw 10000,1000,100,10,4096,256,16;转化需要用到的数
hord  db'plz input 2 numbers,first input H or D','$';输入H或者D代表用户输入的十进制或者16进制数
data ends;测试方法:输入方式是输入一个H或者D(接着不要输入任何其他字符)然后紧跟着输入一个数空格,再输入一个数空格,屏幕会显示某进制输出的和,如提示语句出现后,输入D110(空格)120(空格)会在120后面显示E6
stack segment;用户输入16进制大小写均可,输出规定用大写输出
stack ends
code segment
assume     cs:code,ss:stack,ds:data
begin:     mov ax,data
           mov ds,ax
           lea dx,hord
           mov ah,9
           int 21h
           xor dx,dx
           mov ah,1
           int 21h
           mov flag1,al;flag1存放用户输入的进制信息
           xor ax,ax
           cmp flag1,44h;是否输入十进制
           jnz hex;不是'D'跳转16进制输入
           call input
hex:       call inputd
transformh:mov di,6;不同输入对di的处理,是为了以后引用下标只要写一段程序就可以,修改下标方法相同
           jmp transform
transformd:mov di,0
transform: inc flag0;输入一个数标志增1
           mov ah,0
           mov bx,0
           mov dx,0
           cmp cx,1;之前写的不用将cx与1,2,3,4一个个比较这么麻烦,是用一个数组存放1,10,100,1000,数组下标与cx有某种联系,可是这样容易犯糊涂出现错误所以放弃了
           jz  x1
           cmp cx,2
           jz x2
           cmp cx,3
           jz x3
           cmp cx,4
           jz x4
           cmp cx,5
           jz x5
x1:        mov al,[bx]
           push ax
           cmp  flag0,2;如果flag0==2
           jz sum;则跳转求和
           cmp flag1,44h;判断哪种进制输入
           jz input;跳转不同的输入方式
           jmp inputd
x2:        mov al,[bx]
           add di,6;对下标的处理,下面类似,代码很多其实就是重复不需要注释了
           mov si,table[di]
           mul si
           push ax
           mov  al,[bx+1]
           pop  dx
           add  ax,dx
           push ax
           cmp flag0,2
           jz sum
           cmp flag1,44h
           jz input
           jmp inputd
x3:        mov al,[bx]
           add di,4
           mov si,table[di]
           mul si
           push ax
           mov ah,0
           mov al,[bx+1]
           add di,2
           mov si,table[di]
           mul si
           push ax
           mov ah,0
           mov al,[bx+2]
           pop dx
           add ax,dx
           pop dx
           add ax,dx
           push ax
           cmp flag0,2
           jz sum
           cmp flag1,44h
           jz input
           jmp inputd
x4:        mov al,[bx]
           add di,2
           mov si,table[di]
           mul si
           push ax
           mov ah,0
           mov al,[bx+1]
           add di,2
           mov si,table[di]
           mul si
           push ax
           mov ah,0
           mov al,[bx+2]
           add di,2
           mov si,table[di]
           mul si
           push ax
           mov ah,0
           mov al,[bx+3]
           pop dx
           add ax,dx
           pop dx
           add ax,dx
           pop dx
           add ax,dx
           push ax
           cmp flag0,2
           jz sum
           cmp flag1,44h
           jz input
           jmp inputd
x5:        mov al,[bx]
           mov si,table[di]
           mul si
           push ax
           mov ah,0
           mov al,[bx+1]
           add di,2
           mov si,table[di]
           mul si
           push ax
           mov ah,0
           mov al,[bx+2]
           add di,2
           mov si,table[di]
           mul si
           push ax
           mov ah,0
           mov al,[bx+3]
           add di,2
           mov si,table[di]
           mul si
           push ax
           mov ah,0
           mov al,[bx+4]
           pop dx
           add ax,dx
           pop dx
           add ax,dx
           pop dx
           add ax,dx
           pop dx
           add ax,dx
           push ax
           cmp flag0,2
           jz sum
            cmp flag1,44h
           jz input              
sum:       pop dx;**************求和***************
           pop ax
           add ax,dx
           cmp flag1,44h;判断,跳转哪种进制输出
           jnz outputd
output:    mov cx,0;用cx计数转化为16进制后有几位
outputt:   mov bx,16;转化为16进制输出
           xor dx,dx
           div bx
           push dx
           inc cx
           cmp ax,0
           jnz outputt
output0:   pop dx
           cmp dx,9h;如果比9大用字母表示
           ja l1
           add dx,30h
           mov ah,2
           int 21h
           loop output0
           jmp endd
l1:        add dl,37h;输出字母统一用大写字母输出
           mov ah,2
           int 21h
           loop output0
endd:      mov ax,4c00h
           int 21h
outputd:    mov cx,0;用cx计数转化为10进制后有几位
outputdd:   mov bx,10;转化为10进制输出
           xor dx,dx
           div bx
           push dx
           inc cx
           cmp ax,0
           jnz outputdd
outputd0:   pop dx
           add dx,30h
           mov ah,2
           int 21h
           loop outputd0
           jmp endd
input:     mov cx,0;用cx计数输入的数有几位
           mov bx,0;******输入10进制数***************
input0:    mov ah,1
           int 21h
           cmp al,20h
           jz transformd
           sub al,30h
           mov [bx],al
           inc cx
           inc bx
           jmp input0
inputd:    mov cx,0;用cx计数输入的数有几位
           mov bx,0;********输入16进制数**************
inputd0:    mov ah,1
           int 21h
           cmp al,20h
           jz transformh
           cmp al,41h;字母还是数字
           jae line1
           sub al,30h
           mov [bx],al
           inc cx
           inc bx
           jmp inputd0
line1:     cmp al,61h;大写还是小写
           jae line2
           sub al,37h
           mov [bx],al
           inc cx
           inc bx
           jmp inputd0
line2:     sub al,57h
           mov [bx],al
           inc cx
           inc bx
           jmp inputd0          
           code ends
           end begin             





















0 0
原创粉丝点击