CODE SEGMENT
ASSUME CS:CODE START: MOV CX, 0
MOV DX,17
AA1: SUB DX, 1
JZ AA3
SHL AX, 1
JNC AA2
INC CH
JMP AA1
AA2: INC CL
JMP AA1
AA3: MOV AH,4CH
INT 21H CODE ENDS
END START
1.编写比较两个字符串STRING1和STRING2所含字符是否完全相同的源程序,若相同则显
示“MATCH”,若不相同则显示“NO MATCH”。
程序:
DATA SEGMENT
R1 DB 'MATCH',0AH,0DH
R2 DB 'NO MATCH',0AH,0DH
STRING1 DB 'XXXXX'
N1 EQU $-STRING1
STRING2 DB 'YYYYY'
N2 EQU $-STRING2
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AX,N1
CMP AX,N2
JNZ AA1
ADD AX,1
LEA SI,STRING1
LEA DI,STRING2 AA2: MOV BL,[SI]
MOV BH,[DI]
INC SI
INC DI
SUB AX,1
JZ AA3
CMP BL,BH
JZ AA2
JMP AA1
AA3: LEA BX,R1
MOV CX,7
AA4: MOV DL,[BX]
INC BX
MOV AH,2
INT 21H
LOOP AA4
JMP E
AA1: LEA BX,R2
MOV CX,10
AA5: MOV DL,[BX]
INC BX
MOV AH,2
INT 21H
LOOP AA5
E: MOV AH,4CH
INT 21H
CODE ENDS
END START
2.从键盘读入一个四位的十六进制数,CRT显示等值的二进制数.
由于每个十六进制数位对应4个二进制,所以每读入一个十六进制位后,即可将其对应的4个二进制位依次输出。
由于数字‘0’~ ‘9’的ASCⅡ码为30H~39H,字母‘a’~‘f’与
‘A’~‘F’的ASCⅡ码为61H~66H 与41H~46H ,因此,如果输入的字母为数字‘0’~‘9’,则其低4位即为对应的二进制位;如果输入的字符为字母‘a’~‘f’或‘A’~‘F’,则需要减7,然后通过移位将低4位依次输出。
汇编程序如下:
DATA SEGMENT
MSG1 DB 'Hex:', '$'
MSG2 DB 0DH, 0AH, 'Binary:', '$'
COUNT EQU 4
BUF DB 4 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX, DATA
MOV DS, AX
LEA DX, MSG1
MOV AH, 9
INT 21H
MOV CX, COUNT
MOV SI, 0
INPUT: ;通过四次循环从键盘读入四位十六进制数MOV AH, 1
INT 21H
MOV BUF[SI], AL
DEC CX
INC SI
CMP CX, 0
JNZ INPUT
NEXT3: LEA DX, MSG2
MOV AH, 9
INT 21H
MOV CX, COUNT
MOV SI, 0
NEXT2: MOV BL, BUF[SI]
CMP BL , '9'
JBE OK ;读入的字符<=9转向OK:
SUB BL, 7 ;读入字符>= 9 减7
OK: PUSH CX
MOV CL ,4
SHL BL, CL ; 逻辑左移4位,低4位à高4位
MOV CX, 4 ; 4次循环将当前处理字符的4位二进制输出
NEXT1: MOV DL, '0'
SHL BL, 1
JNC SKIP
INC DL
SKIP: MOV AH, 2
INT 21H
LOOP NEXT1
POP CX ;
INC SI
LOOP NEXT2 ; 4次循环将4位十六进制数,每位转换为对应的4位二进制EXIT: MOV AH, 4CH
INT 21H
CODE ENDS
END START
3.设从STRING开始存放一个以$为结束标志的字符串,试编写把字符串中的字符进行分类
的源程序,数字字符送入NUM开始的内存中,大写字母送入BCHAR开始的内存区中,小写字母存入LCHAR开始的内存中,其他字符存入OTHER开始的内存区中。
DATA SEGMENT
STRING DB 'abc123ABC','$'
N EQU $-STRING
NUM DB N DUP(?)
BCHAR DB N DUP(?)
LCHAR DB N DUP(?)
OTHER DB N DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START:MOV AX,DATA
MOV DS,AX
LEA BX,STRING
DEC BX
LEA SP,BCHAR
LEA CX,LCHAR
LEA DX,OTHER
LEA SI,NUM
AA1:INC BX
4.MOV AL,[BX] 如,当DX=2A49H时,程序执行完后,MEM中的
4个字节内容为39H、34H、41H、和32H。
答:
DATA SEGMENT
SOURCE DW 2A49H
MEM DB 4 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
;
START:
MOV AX,DATA
MOV DS,AX
;
MOV DX,SOURCE
LEA BX,MEM
;
;set the loop
MOV CX,4
;the loop body
LB: MOV AX,DX
AND AX,000FH
CMP AL,10
JC AD ;
ADD AL,7
;
AD: ADD AL,30H
MOV [BX],AL
INC BX ;
SHR DX,1
SHR DX,1
SHR DX,1
SHR DX,1
LOOP LB
;the loop end, return to dos
MOV AH,4CH
INT 21H
CODE ENDS
END START
5.下面程序段是实现从键盘输入10个1位10进制数后累加。
最后累加和以非压缩BCD码
形式存放在AH(高位)和AL(低位)中。
答:
XOR DX,DX
MOV CX 10
LOP1: MOV AH,01H;键盘字符输入
INT 21H
MOV AH,DH
ADD AL,DL
AAA
MOV DX,AX
LOOP LOP1。