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
- 8086汇编 计算输入两个十进制数之和用16进制输出//输入两个十六进制数之和用10进制输出
- 输入十进制数,输出十六进制
- Java实现将两个数之和用标准形式输出
- 输入两个数,输出最大值
- 输入十六进制数输出相应的十进制数
- 将两个数以十六进制,十进制,八进制输出
- 输入一个数n,编程计算输出1-n之间的所有素数之和
- C++输入两个数,输出两个数之间的整数
- 输入一个数,如果各位数之和小于10,则输出位数之和,否则将位数之和继续求和,直到小于10,并输出
- 求两个数之和
- 两个数之和
- 汇编,接收两个2位十进制数,相加后输出
- 【Ex.】随机产生两个数计算之和
- 汇编语言编写数组的问题和实现输入两个十进制数输出的问题
- c语言 输入两个人数 输出两个数的积
- 输入两个数A,B,输出A+B的值2(用数字控制组数)
- (汇编)输入一个十进制数字串(无符号),以四位十六进制的形式输出
- 输入一个十六进制的数,然后按位输出2进制形式
- SQL数据库缓存
- WPF中给datagrid控件中dataTable添加新行,并选中设为当前行(源码加注释)
- 安全驾驶-携带拖车绳(三十一)
- Android5.0失效API统计及解决兼容的方法
- Dynamic Programming--Longest Common Subsequence
- 8086汇编 计算输入两个十进制数之和用16进制输出//输入两个十六进制数之和用10进制输出
- 【菜鸟学Java】9:使用dom4j解析jdbc.xml
- 安全驾驶-锁车门(三十二)
- InnoDB Log checkpointing 和 dirty Buffer pool page的关系
- 一些英文词的标准缩写
- 将EditText的光标定位到字符的最后面
- 安全驾驶-儿童不坐副驾驶(三十三)
- scala学习-if,while,for,try用法7
- JAVA并发处理经验(四)并行模式与算法2:Future模式