许昌学院微机原理实验指导书
CMP AL, SOURCE+1 JNC BRANCH MOV AL, SOURCE+1 BRANCH:
MOV MAX, AL
MOV AX, 4C00H ;DOS返回的另外一种方法 INT 21H CODE ENDS END START
3)P105例4-39将内存中某一区域内的数据块传送到另外一个区域中去。 DATA SEGMENT
STR DB 1000 DUP(?) ;源操作数与目的操作数均在此空间 STR1 EQU STR+7 ;数据块的起始地址偏移量(假设) STR2 EQU STR+25 ;目的数据区的起始地址偏移量(假设) STRCOUNT EQU 50 ;源数据块的字节数(假设) DATA ENDS
STACK SEGMENT STACK 'STACK' DB 100 DUP(?) STACK ENDS CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK ES:DATA START: MOV AX, DATA MOV DS, AX MOV ES, AX
MOV CX, STRCOUNT MOV SI, STR1 MOV DI, STR2 CLD PUSH SI
22
许昌学院微机原理实验指导书
ADD SI, STRCOUNT-1
CMP SI, DI ;判断源地址+数据块长度是否大于目的地址 POP SI ;注意不要改变SI的值 JL OK STD
ADD SI,STRCOUNT-1 OK:
REP MOVSB
MOV AX, 4C00H ;DOS返回的另外一种方法 INT 21H CODE ENDS END START
105) P107例4-40,编写程序完成10个数的求和:SUM??ai?1i?a1?a2?.......a10。
DATA SEGMENT
BUFFER DW 1,2,3,4,5,6,7,8,9,10 SUM DW ? DATA ENDS STACK SEGMENT DB 100 DUP (?) STACK ENDS CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK START:
MOV AX, DATA MOV DS, AX MOV AX, 0
MOV DI, OFFSET SUM MOV BX, OFFSET BUFFER MOV CX, 10
23
许昌学院微机原理实验指导书
LOOP1:
ADD AX, [BX]
INC BX INC BX DEC CX
JNZ LOOP1 MOV [DI], AX MOV AX, 4C00H INT 21H CODE ENDS
END START
5)P108例4-41,给定一串16位数,找出其中大于零、等于零和小于零的个数。 DATA SEGMENT
BUFF DW 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 COUNT EQU $-BUFF PLUS DB ? ZERO DB ? MINUS DB ? DATA ENDS STACK SEGMENT DB 100 DUP(?) STACK ENDS CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STACK, ES:DATA BEGIN:
MOV AX, DATA MOV DS, AX MOV CX, COUNT SHR CX, 1 MOV DX, 0
24
许昌学院微机原理实验指导书
MOV AH, 0 LEA BX, BUFF
AGAIN:CMP WORD PTR [BX], 0 JAE PLU INC AH JMP NEXT PLU: JZ ZER INC DL JMP NEXT ZER: INC DH NEXT: INC BX INC BX LOOP AGAIN MOV PLUS, DL MOV ZERO, DH MOV MINUS, AH MOV AX, 4C00H INT 21H CODE ENDS
END BEGIN
三.编程提示
可以通过debug调试命令进行程序的验证,也可以利用一些简单的DOS功能调用进行显示验证。 四.实验要求
实验前要做好充分准备,包括汇编程序清单、调试步骤、调试方法,以及对程序结果的分析等。
25
许昌学院微机原理实验指导书
五.实验报告
1、程序说明。说明程序的功能、结构。
2、调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的问题是如何解决的,并对调试过程中的问题进行分析,对执行结果进行分析。
3、画出程序框图。
4、写出源程序清单和执行结果。
26