一、 实验目的
熟悉程序框架;理解单重循环与多重循环程序的结构及执行过程;掌握循环控制指令的用法,会使用数据串操作指令编程;熟练掌握循环结构程序的设计方法和利用设置断点调试程序的方法。
二、 示例
编写一子程序,把数据段中1维数组AA_1变量地址中连续7个数(1,3,5,7,2,4,6)读出,把每个数加2后再存入到数据段中BB_1数组开始的标号地址中去,并显示出BB_1数组中每个数来(之间用空格分开)
DATA SEGMENT
ORG 0100H
AA_1 DB 1,3,5,7,2,4,6 //定义七个数
ORG 0150H
BB_1 DB 7 dup(?) //计数为7
COUNT DW 7
DATA ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DATA //将CSEG和DATA分别放在CS和DS中
START:MOV AX,DATA
MOV DS,AX //间接将DATA送入DS
MOV CX,COUNT //CX中保存计数COUNT
LEA SI,AA_1
LEA DI,BB_1 //将储存单元AA_1和BB_1分别送给SI和DI
LP1: MOV AL,[SI]
ADD AL,2
MOV [DI],AL //利用AL将SI中的数加2后放到DI中
INC SI
INC DI //将SI和DI的地址加1,指向下一个待操作的数
LOOP LP1 //循环LP1
LEA SI,BB_1 //将BB_1储存单元中的数放进SI中
MOV CX,COUNT //将COUNT中的数送给CX,用来计数
DISP: MOV DL,[SI] //定义一个变量DISP
ADD DL,30H //将DL中的数加上30H后放进DL
MOV AH, 02
INT 21H //显示输出
MOV DL, ‘ ’ //将空格赋给DL
MOV AH, 2
INT 21H //显示输出
INC SI //将SI的地址加1,指向下一个待操作的数
LOOP DISP 循环DISP过程
MOV AH,4CH
INT 21H //结束
CSEG ENDS
END START
运行截图:
三、 实验题
- 试编制一个程序把AX中的16进制数转换为ASCII码,并将对应的ASCII码依次存放到MEM数组中的四个字节中。例如,当(AX)=2A49H时,程序执行完后,MEM中的4个字节内容为39H,34H,41H,32H。
代码:
DATA SEGMENT
MEM DB 4 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
MOV AX,DATA
MOV DS,AX
MOV AX,2A49H
MOV CX,4
MOV DI,3
L1:PUSH CX
MOV CL,4
ROL AX,CL
MOV BX,AX
AND BX,0FH
ADD BX,30H
CMP BX,3AH
JB L2
ADD BX,7
L2:MOV MEM[DI],BL
DEC DI
POP CX
LOOP L1
MOV AH,4CH
INT 21H
MAIN ENDP
CODE ENDS
END MAIN