汇编语言语法练习与代码转换
一、实验目的和要求1. 掌握汇编语言源程序的格式; 2. 进一步学习汇编语言源程序的编辑、汇编、目标文件的链接和可执行文件的执行全过程; 3. 掌握编辑软件、TASM/MASM、TLINK和TD的使用方法、掌握汇编语言的语法规则。 4. 实验内容: (1)练习并掌握命令行下汇编语言开发全过程,在屏幕打印各自学号,要求在命令行下进行TASM环境进行汇编程序开发的各步骤,汇编源程序的文件名命名为各自学号后四位。 (2)排除语法错误:给出的是一个通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序,但有很多语法错误。要求实验者按照原样对源程序进行编辑,汇编后,根据TASM给出的信息对源程序进行修改,知道没有语法错误为止。然后进行链接,并执行相应可执行文件。正确的执行结果在屏幕上显示:25+9=34。 (3)从BUF单元开始存有一字符串(长度<255),编程实现统计该字符串中的ASCII在42H~45H之间的字符个数,并将统计结果以二进制形式显示在屏幕。 |
二、实验环境Windows XP/Win 7 32位 + TASM/TNPP/轻松汇编/未来汇编软件 |
三、实验过程描述与结果分析(1)汇编语言开发步骤汇编语言源程序编写好以后,必须经过下列几个步骤才能在机器上运行:
程序段为: .586 DATA SEGMENT USE16 MESG DB '20610815', '$' DATA ENDS CODE SEGMENT USE16 ASSUME CS: CODE, DS: DATA BEG: MOV AX, DATA MOV DS, AX MOV AH, 9 MOV DX, OFFSET MESG INT 21H MOV AH, 4CH INT 21H CODE ENDS END BEG 运行结果为: (2)排除语法错误要求通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序。但有很多语法错误,要求按照原样对源程序进行编辑,汇编后,根据TASM给出的错误信息对源程序进行修改,直到没有语法错误为止,然后进行链接,并执行相应的可执行文件。正确的执行结果是在屏幕上显示:25+9=34。 修改后代码:(分号后为修改) .486 DATA SEGMENT USE16 SUM DB ?, ?, ; SUM DB ?, ? MESG DB '25+9=' DB 0, 0 ; DB 0, 0, '$' N1 DB 9, F0H ; N1 DB 9 N2 DW 25 ; N2 DB 25 DATA ENDS CODE SEGMENT USE16 ASSUME CS: CODE, DS: DATA BEG: MOV AX, DATA MOV DS, AX MOV BX, OFFSET SUM MOV AH, N1 MOV AL, N2 ADD AH, AL MOV [BX], AH CALL CHANG MOV AH, 9 MOV DX, OFFSEG MEST ; MOV DX, OFFSET MESG INT 21H MOV AH, 4CH INT 21H CHANG: PROC ; CHANG PROC LAST: CMP [BX], 10 ; CMP BYTE PTR [BX], 10 JC NEXT SUB [BX], 10 ; SUB BYTE PTR [BX], 10 INC [BX+7] ; INC BYTE PTR [BX+7] JMP LAST NEXT: ;MOV AH, SUM ADD [BX+8] ,SUM ; ADD [BX+8], AH ADD [BX+7], 30H ; ADD BYTE PTR [BX+7], 30H ADD [BX+8], 30H ; ADD BYTE PTR [BX+8], 30H RET CHANG: ENDP ; CHANG ENDP CODE ENDS END BEG 运行结果: (3)统计42H~45H之间的字符个数.486 DATA SEGMENT USE16 BUF DB 'ABCDE' COUNT EQU $-BUF DATA ENDS CODE SEGMENT USE16 ASSUME CS: CODE, DS: DATA BEG: MOV AX, DATA MOV DS, AX MOV BL, 0 MOV SI, 0 MOV CX, COUNT CALL CMP CALL DISP MOV AH, 4CH INT 21H CMP PROC AGA1: CMP BUF[SI], 42H JB NEXT1 CMP BUF[SI], 45H JA NEXT1 INC BL NEXT1: INC SI LOOP AGA1 RET CMP ENDP DISP PROC MOV CL, 8 LAST: MOV DL, '0' RCL BL, 1 JNC NEXT2 MOV DL, '1' NEXT2: MOV AH, 2 INT 21H LOOP LAST RET DISP ENDP CODE ENDS END BEG 运行结果: |
四、实验小结通过此次实验,也发现了自己的问题,就比如说之前学的基本知识不扎实,在做第三题的时候对于ASCII的常用码值还不够熟练,并不能很敏锐的、准确的想到对应的码值,这也说明了之前的学的知识在悄悄遗忘,还是需要时常翻翻书,温故一下的。当然对于一些程序代码,也并非使用的很熟练,反而是经常翻书,这恰恰反映了,仅凭上课时间,是不能够牢记这些字符的含义的,也体现了课后巩固的重要作用。 |