5个典型的汇编程序
1. 将 AL 的最高位显示出来 :
DSEG SEGMENT
XXX DB 00H ; xxx 中存放 al 数值
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:MOV AX,DSEG
MOV DS,AX ; DS 初始化
MOV AL,XXX
SHL AL,1 ;对 AL 进行逻辑左移
JC NT1 ;判断 CY 是否为 1 ,是的话跳转 NT1
MOV DL,30H ;不是得话将 0 的对应的 asc 码赋给 DL
JMP MT2
NT1:MOV DL,31H
MT2:MOV AH,02H ;输出 DL 中所存内容
INT 21H
MOV AH,4CH
INT 21H
CSEG ENDS
END START
2. 设计字符比较程序,两个字符相同时,显示 YES; 否则显示 NO 。 :
DATA SEGMENT
D1 DB ‘A’
D2 DB ‘A’
RES1 DB ‘YES’,’$’
RES2 DB ‘NO’,’$’
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AL,D1
MOV BL,D2
CMP AL,BL
JE NEXT1
LEA DX,RES2
JMP NEXT2
NEXT1:LEA DX,RES1
NEXT2:MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
3. 设存储单元 A 和 B 各有一无符号字节数,比较大小,将较大数送 A 单元
DATA SEGMENT
A DB 39H
B DB 0B4H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AL,A
CMP AL,B
JNB NEXT
XCHG AL,B
MOV A,AL
NEXT: MOV AH,4CH
INT 21H
CODE ENDS
END START
4. 内存有一个字节变量 VAL 中存放着小写字符 ’ a ’ ,请将该字符转换为大写字符并在屏幕中显示出来(要求在 debug 中调试出该程序)。
DATA SEGMENT
VAL DB ‘a’
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BL,32
SUB VAL,BL
MOV DL,VAL
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
编译成 exe 程序,并进入 debug
u 命令进行反汇编观察程序代码对应的地址
t 命令逐步执行程序
退出 debug 并运行程序,可以看到打印了大写字母 A
5. 设存储单元 A 和 B 各有一带符号字节数,比较大小和正负,要求将较大数送 RES1 单元;如果有 负数,将一个负数送 RES2 ,否则 RES2 送 -1 (要求在 debug 中调试出该程序)
DATA SEGMENT
A DB 05H
B DB -20H
RES1 DB ?
RES2 DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BL,A
CMP BL,B
JGE NEXT1
MOV AH,B
MOV AL,A
JMP NEXT2
NEXT1: MOV AH,A
MOV AL,B
NEXT2: CMP AL,0
JL NEXT3
MOV RES2,-1
JMP EXIT
NEXT3: MOV RES2,AL
EXIT : MOV AH,4CH
INT 21H
CODE ENDS
END START
编译成 exe 文件
U 命令反汇编。
t 命令逐步执行,
可以看到,经过比较之后我们将负数送入了 [0003] 内存单元( RES2 )中。