1、长春理工大学汇编语言实验报告实验题目: 循环程序设计 实验时间: 2016 年 4 月 20 日 实验地点: 东三教912 班 级: 1405111 学 号: 140511114 姓 名: 王国伟 一、实验目的:1灵活运用各类许循环指令,掌握循环程序的设计方法2 学会针对不同的问题,选用不同的组织循环的方法。 3伪指令 EQU 及操作符 $ 的使用。 4 COM文件的要求和生成过程。二、实验准备1编写任务要求的程序2学习COM文件的生成过程code segment org 100h assume cs:code,ds:code main: jmp start array dw 1234h,56
2、73h,7fffh,8000h,0dffh dw 0ab5h,0369h,005fh,5634h,9069h count equ $-array start: mov cx,count shr cx,1 dec cx mov bl,-1 again: mov dx,cx and bl,bl je exit xor bl,bl xor si,si again1: mov ax,arraysi cmp ax,arraysi+2 jle nchg xchg arraysi+2,ax mov arraysi,ax mov bl,-1 nchg: inc si inc si dec dx jnz aga
3、in1 loop again exit: int 20h code ends end main 1)输入,汇编并连接此程序。忽略 连接时的无堆栈告警。 2)用EXE2BIN将 .exe文件转换为 。COM文件,命令格式: EXE2BIN? ?.EXE ?.COM 3)在DEBUG下运行此程序,记录运行结果。 4)思考:将转移指令JLE改为JBE,JGE和JAE,分别运行并记录排序结果。 JLEJBE三、实验任务1编写程序:将一个包含有20 个有符号数据的数组arrayM 分成两个数组,正数数 组arrayP 和负数数组arrayN,并分别 把两个数组中的数据个数显 示出来 .model sma
4、ll.stack.dataarrayM DB 03H,30H,0F4H,0AFH,0AH,90H,87H,50H,03H,46H,0F4H,0AFH,0AH,90H,87H,50HarrayP DB 20 DUP(?) arrayN DB 20 DUP(?) countP DB ? countN DB ?.code.startup MOV BX,0 MOV SI,0 MOV DI,0 MOV CX,20 MOV countP,0 MOV countN,0 NEXT: MOV AL,arrayMBXTEST AL,80HJNZ NN MOV arrayPSI,AL INC SI INC coun
5、tP JMP PPNN: MOV arrayNDI,AL INC DI INC countN PP: INC BX LOOP NEXTXOR DX,DXXOR BX,BXMOV SI,0 MOV BL,countNLOP: MOV DL,arrayNSI MOV CL,4H SHR DL,CL CMP DL,0AH JC J1 ADD DL,7H J1: ADD DL,30H MOV AH,2H INT 21H MOV DL,arrayNSI AND DL,0FH CMP DL,0AHJC J2 ADD DL,7H J2: ADD DL,30H MOV AH,2H INT 21H MOV DL
6、,20H MOV AH,2H INT 21H INC SI DEC BL JNZ LOPmov ah,02hmov dl,0dhint 21hmov ah,02hmov dl,0ahint 21hXOR DX,DXXOR BX,BXMOV SI,0 MOV BL,countPLOP2: MOV DL,arrayPSI MOV CL,4H SHR DL,CL CMP DL,0AH JC J12 ADD DL,7H J12: ADD DL,30H MOV AH,2H INT 21H MOV DL,arrayNSI AND DL,0FH CMP DL,0AHJC J22 ADD DL,7H J22:
7、 ADD DL,30H MOV AH,2H INT 21H MOV DL,20H MOV AH,2H INT 21H INC SI DEC BL JNZ LOP2.exit 0end2编程实现把键入的一个字符,用二进制形式(0/1)形式显 示出它的ASCII码;-CODE SEGMENT ASSUME CS:CODE, DS:CODESTART: MOV AH, 1 ;1号功能调用INT 21H ;键入、 显示MOV BL, AL ;保存到 BLMOV DL, :MOV AH, 2INT 21H ;显示冒号MOV CX, 8CNS: MOV DL, 0ADD BL, BLJNC DISPINC
8、 DLDISP:MOV AH, 2 ;显示1或0INT 21HLOOP CNS ;循环8次EXIT: MOV AH, 4CH INT 21H CODE ENDS END START3编写程序要求从键盘接收一个数 bellN(0-9),然后响 铃 bellN 次.model small .stack .data mes db please input number:1-9,0dh,0ah,$ .code .startup again:mov dx,offset mes ;显示stri1,提示 输入mov ah,09h int 21h mov ah,01h ;调用输入一个字符 int 21h ;输入一个字符存在al中 cmp al, 1 ;判该字符,如不在 1-9 jb again ;重新输入 cmp al, 9 ja againand al,0fh ;将31h 和39h 转换为1和9mov cl, al ;振铃次数送cx xor ch,ch abc: mov dl, 07h mov ah, 02h int 21h loop abc .exit 0 End四.实验总结1.通过本次实验,学习了如何使用伪指令 EQU 及操作符 $的使用,以及com文件的形成方式.2.学习了各种指令,借用各种循环来完成程序要求.3,学习了数组在程序中的定义方式,以及操作数组的方式.