《2022年微原软件实验二:汇编语言程序设计实用 .pdf》由会员分享,可在线阅读,更多相关《2022年微原软件实验二:汇编语言程序设计实用 .pdf(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、实验二:汇编语言程序设计一、实验目的1)掌握MASM 的操作步骤 ,能够将源程序编译成可执行文件。2)掌握简单的汇编语言程序的设计(建立及调试)。二、实验任务与内容1.实验任务1)编一程序,在显示器上显示256 个 ASCII 代码,要求显示格式为每行显示16 个字符,两个 ASCII 字符间空一格。2)试编一程序,把地址偏移量为100H 单元开始的256 个单元分别写入:00H,01 H,02H,03H, ,FFH 数据。统计写入的数据块中0 元素、正元素、负元素的个数,并分别把统计结果送人上述数据块之后的三个单元中。用 DOS 功能调用显示上面两题中数据块各单元 (包括统计结果)内容。为了
2、显示清晰明了,要求每行显示16 个数据,两个数据之间用空格分开。3)编一程序, 把键入的十六进制数转换成十进制数并在屏幕上显示出来。键入的最大数为FFFFH ,若键人的不是十六进数字,则显示出错提示。2.实验内容1) 显示 256个 ASCII 码(1)源程序DATA SEGMENT ;定义数据段DB 256 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA START: MOV AX, DA TA ;数据段赋值MOV DS, AX MOV CX, 256 MOV DH, 0 LOP: TEST DH, 00001111B ;判断是否显
3、示16 个字符换行JNZ NEXT MOV DL, 13 ;换行CALL DISP MOV DL, 10 CALL DISP NEXT: MOV DL, DH ;显示字符CALL DISP MOV DL, ;两字符间加空格CALL DISP INC DH ;使用 DH 计数LOOP LOP DONE: ;退出程序MOV AH,4CH INT 21H DISP PROC NEAR ;在屏幕上显示字符PUSH AX MOV AH, 2 INT 21H ;DOS 功能调用POP AX RET DISP ENDP CODE ENDS END START Yes 名师资料总结 - - -精品资料欢迎下载
4、 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - (2)程序流程图2)写入数据,统计元素个数(1)源程序DATA SEGMENT HEX DB 0123456789ABCDEF M1 DB 13,10,BUFFER DUMP:,13,10,36 M2 DB 13,10,NUMBER OF ZEROES:$ M3 DB 13,10,NUMBER OF POSITIVE ELEMENTS:$ M4 DB 13,10,NUMBER OF NEGATIVE ELEMENTS:
5、$ ORG 100H ;从 100H 处开始BUF DB 256 DUP (.) ZEROES DB 0 POSTVS DB 0 NEGTVS DB 0 DATA ENDS STACK SEGMENT STACK DW 2048 DUP(?) STACK ENDS CODE SEGMENT MAIN: MOV AX,DATA MOV DS,AX ;缓冲区的地址存入DS:SI,清点数据时使用DS:SI MOV ES,AX ASSUME DS:DATA,ES:DATA MOV SI,OFFSET BUF ;再存一遍到ES:DI,填充数据时使用ES:DI MOV DI,SI MOV CX,256 ;
6、计数器XOR AX,AX ;AX 清零CLD ;清零方向标志;先对 BUF 按要求 1 进行填充LP1: STOSB ;AL 内容填入 ES:DI 、且 DI 自动 +1 INC AX ;AL 也加 1 LOOP LP1 ;循环;清点 0 元素、正负元素个数DH=00H 开始DH=0FH? 显示字符显示空格DH= DH+1 换行Yes No 显示流程图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 - - - - - - - - - MOV CX,256 ;计数
7、器LP2: LODSB ;从 DS:SI 里读出值到AL ,SI 自动增 1 CMP AL,0 ;AL 与 0 比较JZ ISZERO ;是 0,转去增加0 元素计数器内容JG ISPOS ;是正数转去增加正元素计数器内容INC NEGTVS ;否则增加负元素计数器内容LP2NXT: LOOP LP2 ;继续循环直到CX 为 0 JMP SHOW ;然后转去输出ISZERO: INC ZEROES JMP LP2NXT ISPOS: INC POSTVS JMP LP2NXT SHOW: MOV DX,OFFSET M1 ;显示 BUFFER DUMP CALL PUTS MOV CX,256
8、 MOV SI,OFFSET BUF LP3: JCXZ DONE MOV AX,DS ;显示 DS:SI 的地址CALL HEXWORD MOV DL,: CALL PUTC MOV AX,SI CALL HEXWORD MOV DL, ;用两个空格把地址和数据分开CALL PUTC CALL PUTC PUSH CX ;下面输出 8 个数据,内层循环也用CX 控制所以保存一下CX MOV CX,16 LP4: LODSB CALL HEXBYTE ;读入一个数,按16 进制显示出来CALL PUTC ;并且输出一个空格,与下个值分开, DL 刚才已经赋值了LOOP LP4 ;一行输出8 个
9、CALL CRLF ;换行POP CX ;恢复 CX SUB CX,16 ;人工调整CX JNC LP3 ;继续输出下行DONE: MOV DX,OFFSET M2 ;输出 0 元素统计CALL PUTS MOV AL,ZEROES XOR AH,AH CALL PRINTAX MOV DX,OFFSET M3 ;输出正元素统计CALL PUTS MOV AL,POSTVS XOR AH,AH CALL PRINTAX MOV DX,OFFSET M4 ;输出负元素统计CALL PUTS MOV AL,NEGTVS XOR AH,AH CALL PRINTAX MOV AH,4CH ;退出IN
10、T 21H HEXBYTE PROC ;输出 AL 里的十六进制数(2 位)PUSH DX PUSH BX 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 11 页 - - - - - - - - - PUSH AX MOV BX,OFFSET HEX ; 准备 XLAT 查表得到每个数位的字符PUSH AX SHR AL,1 ;AL 右移 4 位后原来的高4 位到了低4 位上SHR AL,1 SHR AL,1 SHR AL,1 XLAT MOV DL,AL CALL P
11、UTC ;输出高四位的数字POP AX AND AL,0FH ;清除 AL 高 4 位, AL 内只剩下低四位了XLAT MOV DL,AL CALL PUTC ;输出低四位的数字POP AX POP BX POP DX RET HEXBYTE ENDP HEXWORD PROC ;输出 AX 里的十六进制数(4 位)PUSH AX MOV AL,AH CALL HEXBYTE ;先输出 AH 内容POP AX CALL HEXBYTE ;再输出 AL 内容RET HEXWORD ENDP PRINTAX PROC ;以 10 进制输出AX 中的无符号整数OR AX,AX ;是 0 则直接输出
12、JNZ F PUSH DX MOV DL,0 CALL PUTC POP DX RET AA: PUSH AX PUSH CX PUSH DX PUSH BX MOV BX,10 XOR DX,DX DIV BX MOV CX,AX OR CX,DX ;若商与余数都为0 则结束递归JZ F PUSH DX ;留存 DX 中的余数以在递归后输出CALL B ;递归POP DX ;从最高位开始恢复余数ADD DL,0 CALL PUTC AA: POP BX POP DX POP CX POP AX RET PRINTAX ENDP PUTC PROC ;输出 DL 里的字符PUSH AX MOV
13、 AH,2 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 11 页 - - - - - - - - - INT 21H POP AX RET PUTC ENDP PUTS PROC ;输出 DS:DX 指向的字串PUSH AX MOV AH,9 INT 21H POP AX RET PUTS ENDP CRLF PROC ;输出回车换行PUSH DX MOV DL,13 CALL PUTC MOV DL,10 CALL PUTC POP DX RET CRLF ENDP
14、 CODE ENDS END MAIN (2)程序流程图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 11 页 - - - - - - - - - 3)十六进制数转换成十进制数(1)源程序CODE SEGMENT ;定义代码段MAIN PROC FAR ;定义段间调用子程序ASSUME CS:CODE ;段寄存器关联说明CALL HEXIN ;调用子程序:键盘输入十六进制数并将其转换成二进制数CALL CRLF CALL BINIDEC CALL CRLF ;调用子程序
15、,输出一个回车、换行JMP MAIN RET MAIN ENDP HEXIN PROC NEAR MOV AX,0 NEWCHAR: MOV AH,01H INT 21H SUB AL,30H ;al-30hal JL EXIT ;al0,转去保存转换结果,结束子程序,返回调用者开始输入字符串存入缓存将附加偏移地址存入AL ,SI 自动增 1 0 元素计数器M2 加 1 逐个检查字符,AL 与 0 比较正数元素计数器M3 加 1 负数元素计数器M4 加 1 CZ=0? CX=CX 1 结束输出,显示结果= 0 0 Yes No 统计流程图名师资料总结 - - -精品资料欢迎下载 - - - -
16、 - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 11 页 - - - - - - - - - CMP AL,10D ;al10?JL ADD_TO ;是则转去转换对应的二进制数SUB AL,27H ;al-27hal CMP AL,0AH ;al=10h ?(此时,相当于比较输入的字符是否大于或等于g) JGE EXIT ;是则转去保存转换结果,结束子程序,返回调用者ADD_TO: MOV CL,4 SHL BX,CL ;bx 左移 4 位MOV AH,0 ADD BX,AX JMP NEWCHAR ;接受下一个十六进制字符E
17、XIT: RET HEXIN ENDP BINIDEC PROC NEAR MOV CX,10000D CALL DEC_DIV ;把 bx 的内容转换成对应的十进制ASCII 码字符并显示MOV CX,1000D CALL DEC_DIV MOV CX,100D CALL DEC_DIV MOV CX,10D CALL DEC_DIV MOV CX,1D CALL DEC_DIV RET DEC_DIV PROC NEAR ;把 bx 的内容转换成对应的十进制ASCII 码字符并显示MOV AX,BX MOV DX,0 ;dx 置 0,准备做除法(除数是 16 位) DIV CX MOV B
18、X,DX ;dxbx,余数赋给bx 保存MOV DL,AL ;aldl,商数赋给dl,准备显示对应的十进制数字符ADD DL,30H ;dl+30h dl,转换成对应的ASCII 码字符MOV AH,02H INT 21H RET DEC_DIV ENDP BINIDEC ENDP ; 子程序,输出一个回车、换行CRLF PROC NEAR MOV DL,0AH ;回车符 dl MOV AH,02H ;dos 功能调用2 号功能:显示一个字符(dl 中) INT 21H MOV DL,0DH MOV AH,02H INT 21H RET CRLF ENDP CODE ENDS END MAIN
19、 (2)程序流程图名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 11 页 - - - - - - - - - 三、实验结果1)显示 256 个 ASCII 码判断输入十六进制数?开始结束调入键盘输入调用 HEXIN 子程序将输出 0 调用 BINIDEC子程序进行转换输出Yes No 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 11 页 - -
20、 - - - - - - - 2) 写入数据,统计元素个数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 11 页 - - - - - - - - - 3)十六进制数转换成十进制数名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 11 页 - - - - - - - - - 四、实验总结心得体会:通过本次的实验,我对汇编语言的程序有了进一步的了解,加
21、强了汇编语言的使用能力, 并通过努力完成了本次试验。在此次实验, 让对一些汇编语言的基本指令更加熟悉,对各种终端调用功能和子程序及宏的使用更加熟练。同时,在实验中也出现了一些问题,通过不断对程序进行修改,增强了自己分析解决问题的能力,但这同时也反映了学习上的一些小漏洞, 让我再以后的学习中注意这些问题。最后我体会到自信心和细心的重要性,这是做每一个试验都比不可少的。在本次实验经过实践学到的知识,对以后的学习和实验都有极大的帮助。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 11 页 - - - - - - - - -