汇编语言 2位十六进制数(字符),转换成数值保存到字节变量num(需要用逻辑左移指令或乘法指令)

;This is the structure of a main module using simplified segment directives
.8086
.MODEL SMALL,C
.STACK 100
.DATA
;......Place data declarations here
db "$$$$$$"
num db 0
c1 db 0
c2 db 0
db "$$$$$$"
;......


.CODE
.STARTUP
;......Place instructions here
mov ah,01h//输入第一个值
int 21h
mov dh,al

mov c1,al


mov ah,01h//输入第二个值 
int 21h
mov dl,al
mov c2,al


.if dh>='0' && dh<='9'
sub dh,'0'
.else 
sub dh,'a'
add dh,10
.endif

.if dl>='0' && dl<='9'
sub dl,'0'//因为输入的默认是字符
.else 
sub dl,'a'
add dl,10
.endif

mov cl,4
shl dh,cl//因为第一个输入的数为高位,所以我们要左移4位,那么该值就变为高位了
add dh,dl
mov num,dh
;......
.EXIT
END
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在80C51中,将十进制转换为二进制码可以通过以下步骤实现: 1. 将十进制存储在一个寄存器中 2. 使用除2取余法将十进制转换为二进制 3. 将得到的二进制存储在另一个寄存器中 4. 将二进制转换为十六进制码 以下是一个示例程序: ``` MOV A, #10 ; 将十进制10存储在寄存器A中 MOV R1, #0 ; 初始化寄存器R1为0,用于存储二进制 LOOP: MOV R2, #0 ; 初始化寄存器R2为0,用于存储余 DIV AB ; 用除2取余法计算余 ADD A, #48 ; 将余转换为ASCII码 MOV R2, A ; 存储余 MOV A, B ; 将商存储在A中 JZ DONE ; 如果商为0,转换完成 ADD A, #48 ; 将商转换为ASCII码 MOV R3, A ; 存储商 MOV A, R2 ; 将余存储在A中 MOV R1, A ; 将余存储在R1中 MOV A, R3 ; 将商存储在A中 SJMP LOOP ; 继续循环 DONE: MOV A, R1 ; 将最后一个余存储在A中 ADD A, #48 ; 将余转换为ASCII码 MOV R2, A ; 存储余 MOV A, R1 ; 将最后一个余存储在A中 DIV AB ; 计算商 ADD A, #48 ; 将商转换为ASCII码 MOV R1, A ; 存储商 MOV A, R2 ; 将最后一个余存储在A中 ADD A, #48 ; 将余转换为ASCII码 MOV R3, A ; 存储余 MOV A, R1 ; 将最后一个商存储在A中 ADD A, #48 ; 将商转换为ASCII码 MOV R4, A ; 存储商 MOV A, R3 ; 将第一个余存储在A中 ADD A, #48 ; 将余转换为ASCII码 MOV R5, A ; 存储余 ; 将二进制转换为十六进制 MOV A, R4 ; 将高4存储在A中 SWAP A ; 交换高低4 ADD A, #55H ; 将值加上55H得到十六进制 MOV R6, A ; 存储高4十六进制 MOV A, R5 ; 将低4存储在A中 ADD A, #48 ; 将值转换为ASCII码 MOV R7, A ; 存储低4十六进制 ; 输出结果 MOV A, R6 ; 输出高4十六进制 CALL OUTPUT MOV A, R7 ; 输出低4十六进制 CALL OUTPUT RET ; 返回 OUTPUT: ; 输出函的实现 RET ``` 上面的程序将十进制10转换为二进制码1010,然后将其转换为十六进制码0AH。请注意,上述程序中的输出函需要根据具体的实现进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值