-u
10F3:0101 EB08 JMP 010B
10F3:0103 8B5E06 MOV BX,[BP+06]
10F3:0106 C747060000 MOV WORD PTR [BX+06],0000 10F3:010B 8B5E06 MOV BX,[BP+06]
10F3:010E 837F0600 CMP WORD PTR [BX+06],+00 10F3:0112 750C JNZ 0120
10F3:0114 8A4604 MOV AL,[BP+04] 10F3:0117 D0D8 RCR AL,1 10F3:0119 7305 JNB 0120
10F3:011B B8FFFF MOV AX,FFFF 10F3:011E EB35 JMP 0155
10F3:0120 8B5E06 MOV BX,[BP+06]
四、实验调试后的程序清单
例8-2
DATA SEGMENT
STR1 DB '0123456789ABCDE' CN EQU $-STR1 STR2 DB CN DUP(?) DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV CX,CN LEA SI,STR1 LEA DI,STR2 LP: MOV AL,[SI] MOV [DI],AL INC SI INC DI LOOP LP MOV AH,4CH INT 21H CODE ENDS
END START
例8-4
DATA SEGMENT
STR1 DB 'ASDFGHJK' CN EQU $-STR1 STR2 DB 'ASDFGTYU' FLAG DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV FLAG,1H
MOV SI,OFFSET STR1 MOV DI,OFFSET STR2 MOV CX,CN CLD
REPZ CMPSB JZ NEXT
MOV FLAG,0H NEXT: MOV AH,4CH INT 21H CODE ENDS
END START
例8-6
DATA SEGMENT
STR1 DB 'PLEASE INPUT STRING:',0AH,0DH,'$' STBUF DB 100 DUP(?) CN DB ? DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV DX,OFFSET STR1 MOV AH,09H INT 21H MOV CL,0H LP: CMP AL,0DH JZ EXIT
MOV [SI],AL INC SI
CMP AL,30H JB NEXT CMP AL,39H JA NEXT INC CL
NEXT: MOV AH,01H INT 21H JMP LP
EXIT: MOV CN,CL
11
MOV AH,4CH INT 21H CODE ENDS
END START
例8-7
DATA SEGMENT
STR1 DB 'WHAT IS YOUR NAME',0AH,0DH,'$' CN EQU $-STR1 ADDR DW ? FLAG DB ? DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV CX,CN
MOV DI,OFFSET STR1 MOV AL,20H REPNZ SCASB JNZ NEXT DEC DI
MOV DI,ADDR MOV FLAG,01H JMP EXIT
NEXT: MOV FLAG,0H EXIT: MOV AH,4CH INT 21H CODE ENDS
END START
例8-8
DATA SEGMENT
X DW 112,342,-56,34,42,546,324,2,4,12,42 Y DW -42,-442,140,123,5,21,542,656,126,12 Z DW 10 DUP(?) F DW 0198H DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV SI,OFFSET X MOV DI,OFFSET Y MOV BX,OFFSET Z
MOV DX,F MOV CX,10 LP: ROR BX,1H JZ NEXT MOV AX,[SI] ADD AX,[DI] MOV [BX],AX JMP EXIT NEXT: MOV AX,[SI] SUB AX,[DI] MOV [BX],AX EXIT: ADD SI,2 ADD DI,2 LOOP LP
MOV AH,4CH INT 21H CODE ENDS
END START
例8-10
DATA SEGMENT
STR DB 'WHAT IS YOUR NFSAKENFSA ',0 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV SI,OFFSET STR MOV AL,[SI] LP: CMP AL,0 JZ EXIT CMP AL,'A' JB NEXT CMP AL,'Z' JA NEXT OR AL,20H MOV [SI],AL NEXT: INC SI
MOV AL,[SI] JMP LP
EXIT: MOV AH,4CH INT 21H CODE ENDS
END START
12
例8-12
DATA SEGMENT
DAT1 DB 'THIS IS A PROGRAM' CN EQU $-DAT1 DAT2 DB 'A' DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX CLD
MOV AL,DAT2 LEA DI,DAT1 REPNZ SCASB JZ FIND JMP EXIT FIND: DEC DI MOV BX,4 LP: MOV CL,4 ROL DI,CL MOV DX,DI AND DL,0FH CMP DL,9 JBE NEXT ADD DL,07H NEXT: ADD DL,30H MOV AH,20H INT 21H DEC BX JNZ LP
MOV DL,'H' MOV AH,02H INT 21H
EXIT: MOV AH,4CH INT 21H CODE ENDS
END START
五、实验结果
六、实验总结
13
试验五 子程序设计
一、试验内容
例9-6 在内存中有一子单元ADR,存有4位BCD码,要求编写一个程序,完成将其转换成4个字节的非组合BCD码并存放到以BUF为首单元的存储区中的功能。
分析:根据题意,可将被分离的字数据放入AX中,用寄存器DI指向存放结果的首单元,实现BCD码的分离可以用截取低4位右移4位的方法连续进行4次完成。
例9-7 已知在内存中有两个字节数组,分别求两个数组的累加和,要求用子程序实现。
分析:完成求累加和的子程序可以通过堆栈传递参数。将数组首单元的地址和数组长度
送入堆栈,调用子程序完成求和功能。
例9-8 从键盘向缓冲区BUF中输入若干位十进制的ASCII码,并转换为二进制数,存于BIN
开始的字单元中。BUF中的数字以0DH结束。
例9-9 假设有一子程序HTOA,将一位十六进制数转换为ASCII码,利用其可实现两位十六
进制数转换为ASCII码的子程序BHTOA和四位十六进制转换为ASCII码的子程序QHTOA。
例9-10 用递归的方法将一个字符数组中的字符串反序输出,字符串以‘$’结束。
二、实验目的
掌握子程序的定义
学习子程序设计的基本过程和设计方法 理解子程序的嵌套和递归 了解中断的相关概念
熟悉DOS功能调用和BIOS调用
在程序设计中,常把多用到的同一程序段或者具有一定功能的程序段抽取出来存放在某一存储区域中,当需要执行的时候,使用调用指令转到这段程序来执行,执行完再返回原来的程序,这个程序段就成为子程序。子程序的设计与使用非常重要。子程序又称为过程,它相当于高级语言中的过程或函数。在执行中需要反复执行的程序段或具有通用性的程序段都可以编为子程序。其中调用子程序的程序段称为主程序。主程序中调用指令的下一条指令的地址成为返回地址,有时也成为断点。
子程序是模块化程序设计的重要手段,采用子程序结构具有以下优点: 1 简化程序设计过程,大量节省程序设计时间;
2 缩短了程序的长度,节省了计算机汇编源程序的时间和程序的存储空间; 3 增加了程序的可读性,便于对程序进行修改和调试; 4 方便程序的模块化,结构化和自顶向下的程序。
三、试验步骤
1 编译C:\\masm>masm test.asm Object filename [test906.OBJ]: Source listing [NUL.LST]: Cross-reference [NUL.CRF]:
2 链接C:\\masm>link test.obj
14
Run File [TEST906.EXE]: List File [NUL.MAP]: Libraries [.LIB]:
3 debug 源程序C:\\masm>debug test -t
AX=1168 BX=0000 CX=0080 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=1158 ES=1158 SS=1168 CS=1169 IP=0003 NV UP DI PL NZ NA PO NC 1169:0003 8ED8 MOV DS,AX -u
1169:0003 8ED8 MOV DS,AX 1169:0005 A10000 MOV AX,[0000] 1169:0008 BF0200 MOV DI,0002 1169:000B E80A00 CALL 0018 1169:000E B90400 MOV CX,0004 1169:0011 E82400 CALL 0038 1169:0014 B44C MOV AH,4C 1169:0016 CD21 INT 21 1169:0018 53 PUSH BX 1169:0019 51 PUSH CX 1169:001A 50 PUSH AX 1169:001B 57 PUSH DI
1169:001C B90400 MOV CX,0004 1169:001F 8BD8 MOV BX,AX 1169:0021 83E30F AND BX,+0F
四、实验调试后的程序清单
例9-6
DATA SEGMENT ADR DW 3425H BUF DB 4 DUP(?) DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,ADR
MOV DI,OFFSET BUF CALL APART MOV CX,4 CALL DISP MOV AH,4CH
INT 21H
APART PROC NEAR PUSH BX PUSH CX PUSH AX PUSH DI MOV CX,4 STA: MOV BX,AX AND BX,00FH MOV [DI],BL INC DI SHR AX,1 SHR AX,1 SHR AH,1 SHR AH,1 SHR AH,1 LOOP STA POP DI POP AX POP CX POP BX RET APART ENDP
DISP PROC NEAR PUSH DI PUSH AX PUSH CX PUSH DX MOV CX,4 ADD DI,3 LP: MOV DL,[DI] ADD DL,30H MOV AH,02H INT 21H DEC DI LOOP LP POP DX POP CX POP AX POP DI RET DISP ENDP CODE ENDS
END START
例9-7
DATA SEGMENT
ARRA DB 13,24,45,36,34,90,87,-63 CNA EQU $-ARRA SUMA DW ?
ARRB DB -21,23,-34,56,65,67,78,81,69,0 CNB EQU $-ARRB SUMB DW ? DATA ENDS
STACK SEGMENT
STA DB 100 DUP(?) TOP EQU 100 STACK ENDS CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK START: MOV AX,DATA MOV DS,AX
MOV AX,STACK MOV SS,AX MOV SP,TOP
MOV SI,OFFSET ARRA PUSH SI
MOV AX,CNA PUSH AX CALL SUM
MOV SI,OFFSET ARRB PUSH SI
MOV AX,CNB PUSH AX CALL SUM MOV AH,4CH INT 21H SUM PROC NEAR PUSH AX PUSH BX PUSH CX PUSH BP PUSHF MOV BP,SP
MOV BX,[BP+14] MOV CX,[BP+12] MOV AX,0 LP1: ADD AL,[BX] ADC AH,0 INC BX
15
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库汇编实验报告(3)在线全文阅读。
相关推荐: