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,DS:DATA,SS:STACK
DATA SEGMENT
TEMP DB 4 DUP(0)
MSG1 DB 10,13,'PLEASE INPUT A HEX NUMBER ',10,13 ,'$'
MSG2 DB 10,13,'THE BINARY NUM IS ',10,13,'$'
ERR DB 10,13,"THE NUM YOU INPUT ISN'T HEX",10,13,'$'
H16 DW 16
DATA ENDS
STACK SEGMENT
DB 128 DUP (0)
TOS DB '$'
STACK ENDS
CODE SEGMENT
CHANGE PROC
MOV CX,0
L:
SHR AX,1
JC P1
MOV BX,30H
PUSH BX
JMP CONT
P1:
MOV BX,31H
PUSH BX
CONT:
INC CX
CMP AX,0
JNE L
O:
POP DX
MOV AH,2
INT 21H
LOOP O
R:
RET
CHANGE ENDP
ERROR PROC
MOV DX,OFFSET ERR
MOV AH,9
INT 21H
RET
ERROR ENDP
P09 PROC
PUSH AX
MOV AX,BX
POP BX
AND BX,000FH
MUL H16
ADD AX,BX
MOV BX,AX
RET
P09 ENDP
Paf2 PROC
PUSH AX
MOV AX,BX
POP BX
AND BX,00FFH
MUL H16
SUB BL,37H
MOV BH,0
ADD AX,BX
MOV BX,AX
RET
Paf2 ENDP
Paf1 PROC
PUSH AX
MOV AX,BX
POP BX
AND BX,00FFH
MUL H16
SUB BL,87
MOV BH,0
ADD AX,BX
MOV BX,AX
RET
Paf1 ENDP
START:
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,OFFSET TOS
MOV DX,OFFSET MSG1
MOV AH,9
INT 21H
MOV BX,0
L1:
MOV AH,1
INT 21H
CMP Al,13
JE NEXT
CMP AL,'0'
JB ERRO
CMP AL,'9'
JNG P
CMP AL,'A'
JB ERRO
CMP AL,'F'
JNG PAF
CMP AL,'a'
JB ERRO
CMP AL,'f'
JNG Pa
ERRO:
CALL ERROR
JMP EXIT
Pa :
CALL Paf1
JMP L1
PAF:
CALL PAF2
JMP L1
P :
CALL P09
JMP L1
NEXT:
MOV DX,OFFSET MSG2
MOV AH,9
INT 21H
MOV AX,BX
CALL CHANGE
EXIT:
MOV AX,4C00H
INT 21H
CODE ENDS
END START
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
试编写一段程序,要求对键盘输入的小写字母用大写字母显示出来。
编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。
编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显示这三个字符。
从键盘上输入一串字符,将其中的小写英文字母变换为大写英文字母,其他字符保持不变。然后将变换后的字符串显示出来。
试编写一段程序,要求比较两个字符串string1和string2所含字符是否相等,如相等示“MATCH”, 若不相同则显示“NO MATCH”。
试编写一段程序,要求在长度为100H字节的数组中,找出大于61H的无符号数的个数并存入字节单元UP中,找出小于2FH的无符号数的个数并存入字节单元DOWN中。
用C写、写完后,在VC里面进入调试模式、然后查看反汇编代码、就可以看到对应的汇编代码了。