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 )中。

类似文章