如何编写一个汇编程序,要求“从键盘接收一个四位的16进制数,并在终端上显示与它等值的二进制数”?
展开全部
程序段如下:
BEGIN: MOV BX, 0 ;用于存放四位的16进制数
MOV CH, 4
MOV CL, 4
INPUT: SHL BX, CL ;将前面输入的数左移4位
MOV AH, 1 ;从键盘取数
INT 21H
CMP AL, 30H ;<0吗?
JB INPUT ;不是‘0~F’的数重新输入
CMP AL, 39H ;是‘0~9’吗?
JA AF ;不是,转‘A~F’的处理
AND AL, 0FH ;转换为:0000B~1001B
JMP BINARY
AF: AND AL, 1101 1111B ;转换为大写字母
CMP AL, 41H ;又<A吗?
JB INPUT ;不是‘A~F’的数重新输入
CMP AL, 46H ;>F吗?
JA INPUT ;不是‘A~F’的数重新输入
AND AL, 0FH ;转换为:1010B~1111B
ADD AL, 9
BINARY: OR BL, AL ;将键盘输入的数进行组合
DEL CH
JNZ INPUT
DISPN: MOV CX, 16 ;将16位二进制数一位位地转换成ASCII码显示
DISP: MOV DL, 0
ROL BX, 1
RCL DL, 1
OR DL, 30H
MOV AH, 2 ;进行显示
INT 21H
LOOP DISP
STOP: RET
BEGIN: MOV BX, 0 ;用于存放四位的16进制数
MOV CH, 4
MOV CL, 4
INPUT: SHL BX, CL ;将前面输入的数左移4位
MOV AH, 1 ;从键盘取数
INT 21H
CMP AL, 30H ;<0吗?
JB INPUT ;不是‘0~F’的数重新输入
CMP AL, 39H ;是‘0~9’吗?
JA AF ;不是,转‘A~F’的处理
AND AL, 0FH ;转换为:0000B~1001B
JMP BINARY
AF: AND AL, 1101 1111B ;转换为大写字母
CMP AL, 41H ;又<A吗?
JB INPUT ;不是‘A~F’的数重新输入
CMP AL, 46H ;>F吗?
JA INPUT ;不是‘A~F’的数重新输入
AND AL, 0FH ;转换为:1010B~1111B
ADD AL, 9
BINARY: OR BL, AL ;将键盘输入的数进行组合
DEL CH
JNZ INPUT
DISPN: MOV CX, 16 ;将16位二进制数一位位地转换成ASCII码显示
DISP: MOV DL, 0
ROL BX, 1
RCL DL, 1
OR DL, 30H
MOV AH, 2 ;进行显示
INT 21H
LOOP DISP
STOP: RET
展开全部
试编写一段程序,要求对键盘输入的小写字母用大写字母显示出来。
编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。
编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。
从键盘上输入一串字符,将其中的小写英文字母变换为大写英文字母,其他字符保持不变。然后将变换后的字符串显示出来。
试编写一段程序,要求比较两个字符串string1和string2所含字符是否相等,如相等示“MATCH”, 若不相同则显示“NO MATCH”。
试编写一段程序,要求在长度为100H字节的数组中,找出大于61H的无符号数的个数并存入字节单元UP中,找出小于2FH的无符号数的个数并存入字节单元DOWN中。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
code segment
assume cs:code
start: mov bx,0
mov ch,4
mov cl,4
s0: mov ah,1 ;键盘输入4个16进制数
int 21h
cmp al,39h ;判断是0~9还是A~H,若是数字减30H,否则还要减07H
jbe next
sub al,07h
next: sub al,30h
shl bx,cl
add bl,al ;转换后的数据存入BX,每存一次左移4位
dec ch
jnz s0 ;输入完则控制显示
mov cx,16
s1: mov dl,0
rol bx,1 ;循环左移1位,最高位移入CF
adc dl,30h ;加30H后可得该位的ASCII码.
mov ah,02h
int 21h
loop s1
mov ax,4c00h
int 21h
code ends
end start
说明:编译连接后,运行后直接输入4个16进制数后回车即可.
assume cs:code
start: mov bx,0
mov ch,4
mov cl,4
s0: mov ah,1 ;键盘输入4个16进制数
int 21h
cmp al,39h ;判断是0~9还是A~H,若是数字减30H,否则还要减07H
jbe next
sub al,07h
next: sub al,30h
shl bx,cl
add bl,al ;转换后的数据存入BX,每存一次左移4位
dec ch
jnz s0 ;输入完则控制显示
mov cx,16
s1: mov dl,0
rol bx,1 ;循环左移1位,最高位移入CF
adc dl,30h ;加30H后可得该位的ASCII码.
mov ah,02h
int 21h
loop s1
mov ax,4c00h
int 21h
code ends
end start
说明:编译连接后,运行后直接输入4个16进制数后回车即可.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询