把两个题目放在了一起,输入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]
&n