当前位置:首页 > 汇编语言实验手册(刘辉)
start: mov ah,1 int 21h mov dl,al mov ah,02 int 21h INT 21H ENDM code_seg segment assume cs:code_seg start: INPUT1 ;宏调用 mov dl,al mov ah,02 int 21h ;输出,要输出的字母放于dl中 mov ax,4c00h int 21h code_seg ends end start mov ax,4c00h int 21h code_seg ends end start 2.对源文件6-first.asm进行汇编产生目标文件obj以及列表文件lst,过程如下:
E:\lhmasm\masm 6-first.asm,6-first.obj,6-first.lst↙ 3.用文本编辑器打开列表文件6-first.lst,内容如下:
Microsoft (R) Macro Assembler Version 6.11 12/28/07 10:40:52 6-first.asm Page 1 - 1
存 机 INPUT1 MACRO 源程 储 器 MOV AH,1
器指序 地 令 INT 21H 清址单 ENDM
0000 code_seg segment assume cs:code_seg 0000 start: INPUT1
0000 B4 01 1 MOV AH,1 0002 CD 21 1 INT 21H
0004 8A D0 mov dl,al 0006 B4 02 mov ah,02
0008 CD 21 int 21h ;输出,要输出的字母放于dl中
000A B8 4C00 mov ax,4c00h
000D CD 21 int 21h 000F code_seg ends end start
Microsoft (R) Macro Assembler Version 6.11 12/28/07 10:40:52
6-first.asm Symbols 2 - 1
27
Macros:
N a m e Type INPUT1 . . . . . . . . . . . . . Proc
Segments and Groups:
N a m e Size Length Align Combine Class
code_seg . . . . . . . . . . . . 16 Bit 000F Para Private
Symbols:
N a m e Type Value Attr start . . . . . . . . . . . . . L Near 0000 code_seg
0 Warnings 0 Errors
注:列表文件同时列出源程序和机器语言程序清单,并给出符号表,因而可使程序调试更加方便。观察lst清单的前面小方框部分,INPUT1被两条指令(MOV AH,1和INT 21H)代替,即宏展开(宏被展开了,展开成两条汇编指令),所展开的指令前面被加了1,以表示是由宏展开得到的。
4.连接6-first.obj形成可执行文件,运行并查看结果。
5.将下面给定的汇编语言源程序6-second.asm建立在你自己的工作目录e:\\lhmasm\\里,然后对其重复1~4步骤。
问题1:程序执行时,6-first和6-second有什么不同? 程序2: 从键盘输入一个字符(不回显),然后输出这个字符,退出程序。 没有宏的程序实现 有宏的程序实现 6-second.asm code_seg segment INPUT7 MACRO assume cs:code_seg MOV AH,7 start: INT 21H ENDM mov ah,7 int 21h code_seg segment assume cs:code_seg mov dl,al start: mov ah,02 INPUT7 ;宏调用 int 21h mov dl,al mov ah,02 mov ax,4c00h int 21h code_seg ends end start int 21h ;输出,要输出的字母放于dl中 mov ax,4c00h int 21h 28
code_seg ends end start 6.将下面给定的汇编语言源程序6-third.asm建立在你自己的工作目录e:\\lhmasm\\里,,然后
对其重复1~4步骤。
程序3: 从键盘输入一个字符(是否回显,由调用时给定的参数决定),然后输出这个字符,退出程序。 没有宏的程序实现 有宏的程序实现 6-third.asm code_seg segment INPUTC MACRO X assume cs:code_seg MOV AH,X start: INT 21H ENDM mov ah,1 int 21h code_seg segment assume cs:code_seg mov dl,al start: mov ah,02 INPUTC 1 ;带参数的宏调用 int 21h mov dl,al mov ah,02 int 21h mov ax,4c00h int 21h code_seg ends INPUTC 7 ;带参数的宏调用 end start mov dl,al mov ah,02 int 21h mov ax,4c00h int 21h code_seg ends end start 7.认真阅读下面两个源程序,将它们建立在你自己的工作目录e:\\lhmasm\\里,,然后对其重
复1~4步骤。
问题2:观察对比两个程序的列表文件,6-forth-1代码段的长度是多少?6-forth-2呢?谁的更多一些,为什么? 程序4: 从键盘输入一个字符,然后输出这个字符,重复3次输入输出操作,退出程序。 有子程序的程序实现 6-forth1.asm code_seg segment assume cs:code_seg input1 proc mov ah,1 int 21h ret input1 endp start:
有宏的程序实现 6-forth2.asm INPUT1 MACRO MOV AH,1 INT 21H ENDM code_seg segment assume cs:code_seg start: INPUT1 29
call input1 mov dl,al mov ah,02 int 21h call input1 mov dl,al mov ah,02 int 21h call input1 mov dl,al mov ah,02 int 21h mov ax,4c00h int 21h code_seg ends end start mov dl,al mov ah,02 int 21h INPUT1 mov dl,al mov ah,02 int 21h INPUT1 mov dl,al mov ah,02 int 21h mov ax,4c00h int 21h code_seg ends end start 30
共分享92篇相关文档