汇编实验2讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二循环与子程序程序设计
一、实验目的
1) 加深对循环结构的理解。
2)掌握循环程序的设计方法。
3)学习子程序的定义和调用方法。
4)掌握子程序、子程序的嵌套、递归子程序的结构。
5) 掌握子程序设计、编制及调试。
6) 熟练掌握DEBUG的常用命令,学会用DEBUG调试程序。
二、实验内容
1) 编制程序计算S=1+2·3+3·4+4·5+……+N(N+1)+……直到N(N+1)大于200为止,并将结果由屏幕上显示出来。
2)将从3000H内存单元开始的100个字节存储单元全部清0。
3)编制在屏幕上显示九九乘法表的程序。
4)编制在屏幕上显示用*组成的三角形的程序。
5)设有五个字数据存放在以BUF为首地址的内存单元中,要求采用调用多个字数据相加的子程序方法编程,和的低位字放在RESULT单元,和的高位字放在RESULT+2单元,并将结果显示在屏幕上。
6)编写一个递归子程序,计算指数函数X n的值,其中X,n从键盘输入。
三、实验设备
PC机一台
四、实验步骤
1) 按程序流程图编制实验程序。
2) 输入源程序。
3) 汇编、连接程序,执行程序,检查结果。
4)对内存单元3000H开始的100个存储单元用E命令输入任意数。
5) 程序的执行可用DEBUG的G命令,也可用T命令单步跟踪执行。
6) 用D命令检查执行结果。
五、实验报告的要求
1)列出源程序。
2)对程序中用到的寄存器说明其功能。
3)总结计数控制循环程序的设计方法。
4) 说明怎样使用DEBUG进行程序调试的。
调试过程中所遇到的问题是如何解决的。
实验2-1
源程序:
DATA SEGMENT
BUF DB '1+2*3+3*4+4*5+...+N(N+1)=$'
DATA ENDS
STACK1 SEGMENT PARA STACK
DW 20H DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV DX,01H
MOV BX,01H
L1:INC BX
MOV AX,BX
INC AX
MUL BL;(进行乘法运算,bl作为乘数)
ADD DX,AX;(DX作为累加变量)
CMP AX,200;N(N+1)是否大于200
JBE L1
MOV BX,DX
LEA DX,BUF
MOV AH,09H
INT 21H;输出字符串
MOV CX,4
LOP:MOV AX,4
MOV DX,BX
MUL CL
SUB AX,4
MOV AH,AL
MOV AL,CL
MOV CL,AH;
SHR DX,CL;cl作为移位位数寄存器
AND DX,0FH
CMP DX,0AH
JBE L2
ADD DX,7H
L2:ADD DX,30H
MOV CL,AL;
MOV AH,02H
INT 21H
LOOP LOP;输出数据
MOV AH,4CH
INT 21H
CODE ENDS
END START
运行结果:
实验2-2
源程序:
stack1 segment para stack
dw 20h dup(0)
stack1 ends
code segment
assume cs:code,ss:stack1 start:
mov ax,300h
mov ds,ax
mov cx,100;cx作为循环变量lop:mov bx,cx ;bx作为地址偏移mov al,0h ;al为0,目的是清零
mov -1[bx],al
loop lop
mov ah,4ch
int 21h
code ends
end start
运行结果:
实验2-3
源程序:
data segment
BUF DB 09H,09H
data ends
stack1 segment para stack
dw 20h dup(0)
stack1 ends
CODE SEGMENT
assume cs:code,ds:data,ss:stack1,es:data START:
MOV AX,DATA
MOV DS,AX
AND CX,0000H
MOV CL,09H;;cl作为循环变量
L1:MOV BUF,CL
MOV CL,09H
L2:MOV BUF+1,CL
MOV AL,10
SUB AL,BUF
MOV DL,AL
OR DL,30H
MOV AH,02H
INT 21H
MOV DL,'*'
MOV AH,02H
INT 21H
MOV BL,10
SUB BL,BUF+1
MOV DL,BL
OR DL,30H
INT 21H
MOV DL,'='
INT 21H;会运行一段小程序,使AX的值改变AND AX,0000H
MOV AL,10
SUB AL,BUF
MOV DL,AL
MUL BL
MOV BL,10
DIV BL
MOV DL,AL
MOV DH,AH
OR DL,30H
MOV AH,02H
INT 21H
MOV DL,DH
OR DL,30H
MOV AH,02H
INT 21H
MOV DL,' '
INT 21H
MOV CL,BUF+1
LOOP L2
INT 21H
MOV CL,BUF
LOOP L1
MOV AH,4CH
INT 21H
CODE ENDS
END START
运行结果:
实验2-4
源程序:
data segment
M DB 20H
LS DB 00H
LP DB 00H
data ends
stack1 segment para stack dw 20h dup(0)
stack1 ends
CODE SEGMENT
assume cs:code,ds:data,ss:stack1,es:data START:
MOV AX,DATA
MOV DS,AX
MOV AL,03H
MOV AH,00H
INT 10H
MOV CX,5
L1:MOV LP,CL
MOV BX,6H
SUB BX,CX
MOV LS,BL
MOV BH,00H
MOV DH,LS
MOV AL,M
AND AH,00H
SUB AL,LS
MOV DL,AL
MOV AH,02H
INT 10H
MOV AL,LS
AND AH,00H
MOV BX,2
MOV AL,LS
MUL BL
SUB AL,1
MOV LS,AL
MOV AH,9H
MOV AL,'*'
MOV BH,0
MOV BL,0DH
MOV CL,LS
AND CH,00H
INT 10H
MOV CL,LP
AND CH,00H
LOOP L1
MOV AH,4CH
INT 21H CODE ENDS END START
运行结果:
实验2-5
源程序:
STACK SEGMENT STACK DW 100H DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK START:MOV AH,01H
INT 21H
AND BX,0000H
SUB AL,30H
MOV BL,AL
MOV AH,01H
INT 21H
SUB AL,30H
AND CX,0000H
MOV CL,AL
MOV AX,01H
AND DX,0000H
CALL M
PUSH AX
MOV BX,DX
CALL SHOW
POP AX
MOV BX,AX
CALL SHOW
MOV AH,4CH
INT 21H
M PROC
SUB CX,1H
JBE L
CALL M
L:PUSH DX
MUL BX
MOV CX,AX
POP AX
PUSH DX
MUL BX
POP DX
ADD DX,AX
MOV AX,CX
RET
M ENDP SHOW PROC
MOV CX,4
L2:PUSH CX
MOV CL,4
ROL BX,CL
MOV DL,BL
AND DL,0FH
CMP DL,0AH
JB L3
ADD DL,07H L3:ADD DL,30H
MOV AH,02H
INT 21H
POP CX
LOOP L2
RET
SHOW ENDP CODE ENDS
END START
运行结果:
实验2-6
源程序:
STACK SEGMENT STACK DW 100H DUP(?)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK START:MOV AH,01H
INT 21H
AND BX,0000H
SUB AL,30H
MOV BL,AL
MOV AH,01H
INT 21H
SUB AL,30H
AND CX,0000H
MOV CL,AL
MOV AX,01H
AND DX,0000H
CALL M
PUSH AX
MOV BX,DX
CALL SHOW
POP AX
MOV BX,AX
MOV AH,4CH
INT 21H
M PROC
SUB CX,1H
JBE L
CALL M
L:PUSH DX
MUL BX
MOV CX,AX
POP AX
PUSH DX
MUL BX
POP DX
ADD DX,AX
MOV AX,CX
RET
M ENDP SHOW PROC
MOV CX,4
L2:PUSH CX
MOV CL,4
ROL BX,CL
MOV DL,BL
CMP DL,0AH
JB L3
ADD DL,07H L3:ADD DL,30H
MOV AH,02H
INT 21H
POP CX
LOOP L2
RET
SHOW ENDP CODE ENDS
END START
运行结果:。