如何编写一个汇编程序,要求“从键盘接收一个四位的16进制数,并在终端上显示与它等值的二进制数”?

2024-12-26 02:08:44
推荐回答(3个)
回答1:

程序段如下:
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 ;又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

回答2:

试编写一段程序,要求对键盘输入的小写字母用大写字母显示出来。

  1. 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。

  2. 编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。

  3. 从键盘上输入一串字符,将其中的小写英文字母变换为大写英文字母,其他字符保持不变。然后将变换后的字符串显示出来。

  4. 试编写一段程序,要求比较两个字符串string1和string2所含字符是否相等,如相等示“MATCH”, 若不相同则显示“NO MATCH”。

  5. 试编写一段程序,要求在长度为100H字节的数组中,找出大于61H的无符号数的个数并存入字节单元UP中,找出小于2FH的无符号数的个数并存入字节单元DOWN中。

回答3:

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进制数后回车即可.