第7章 高级汇编语言技术
- 格式:doc
- 大小:197.00 KB
- 文档页数:5
3545233.doc 制作:江家宝《IBM—PC汇编语言程序设计》课后作业参考答案目录第一章:基础知识 ........................................................................................ 2第二章:80×86计算机组织......................................................................... 2第三章:80×86的指令系统和寻址方式..................................................... 3第四章:汇编语言程序格式........................................................................ 7第五章:循环与分支程序设计.................................................................... 9第六章:子程序结构 ................................................................................ 12第七章:高级汇编语言技术.................................................................... 20第八章:输入输出程序设计.................................................................... 22第九章:BIOS和DOS中断 (23)3545233.doc 制作:江家宝第一章:基础知识1.1、用降幂法和除法将下列十进制数转换为二进制数和十六进制数:(3) 4095 答:(3) 4095 =1111 1111 1111B=FFFH1.2、将下列二进制数转换为十六进制数和十进制数:(1) 10 1101 答:(1) 10 1101B=2DH=451.3、将下列十六进制数转换为二进制数和十进制数:(4) 1234 答:(4) 1234H=1 0010 0011 0100B=46601.4、完成下列十六进制数的运算,并转换为十进制数进行校核:(3) ABCD-FE 答:(3) ABCD-FEH=AACFH=437271.5、下列各数均为十进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果。
第7章高级汇编语言技术
1.教学目的:掌握宏的定义和宏调用,理解宏展开
2.教学要求:
①掌握宏定义和宏调用,理解宏展开。
3.教学重点:
①宏定义、宏调用
4.掌握难点:
①宏定义和宏调用。
5.教学进程安排:P246~261
6.教学方法:
课堂讲授
7.教学内容摘要:
7.1 宏定义和宏调用
7.1.1 宏指令的定义和宏调用
1、宏指令定义
宏指令名MACRO [形式参数1,形式参数2,…形式参数N]
┇;宏指令体(宏体)
ENDM
宏指令名:由字母、数字或下划线组成,但第一个符号必须是字母。
2、宏调用
宏指令名实际参数1,实际参数2,…实际参数N
实元(实参):常数、寄存器、存储单元等
注:宏必须先定义后调用,宏定义往往放在程序一开始
7.1.2 宏展开和程序实例
例1:定义一个宏求两个数之和
summ macro opr1,opr2,result ;宏定义
push cx ;现场保护
push si
mov ax,opr1
add ax,opr2
mov result,ax
pop si ;现场恢复
pop cx
endm
dseg segment
num1 dw 1,2
sum1 dw ?
num2 dw 1234h,56A0h
sum2 dw ?
dseg ends
cseg segment
assume cs:cseg,ds:dseg
start:mov ax,dseg
mov ds,ax
summ num1,num1+2,sum1 ;第一次宏调用 summ num2,num2+2,sum2 ;第二次宏调用 mov ah,4ch
int 21h
cseg ends
end start_
例2: 定义一个宏完成回车换行(无变元的宏)
cr macro ;宏定义
mov ah,02h
mov dl,0Dh
int 21h
mov ah,02h
mov dl,0Ah
int 21h
endm
dseg segment
str db 'please enter your name:','$' dseg ends
cseg segment
assume cs:cseg,ds:dseg
start:mov ax,dseg
mov ds,ax
mov ah,09h ;输出字符串
lea dx,str
int 21h
cr ;宏调用
...
mov ah,4ch
int 21h
cseg ends
end start
例3: 定义一个宏完成两个数的不同操作
szys macro p1,p2,op ;宏定义(p1和p2为操作数,op为操作码)
push ax ;现场保护
mov ax,p1
op ax,p2
pop ax ;现场恢复
endm
dseg segment
num dw 1,2
result dw ?
dseg ends
cseg segment
assume cs:cseg,ds:dseg
start:mov ax,dseg
mov ds,ax
;两数相加
szys num,num+2,add ;第一次宏调用
;两数相减
szys num,num+2,sub ;第二次宏调用
;两数比较
szys num,num+2,cmp ;第三次宏调用
;两数相与
szys num,num+2,and ;第四次宏调用
mov ah,4ch
int 21h
cseg ends
end start
例4: 定义一个宏完成不同的转移指令(形式参数可以是操作码的一部分) jj macro cont,dst ;宏定义
j&cont dst
endm
cseg segment
assume cs:cseg,ds:dseg
start:mov ax,dseg
mov ds,ax
...
jj z,poc1 ;第一次宏调用展开为jz poc1
...
jj ng,poc2 ;第二次宏调用展开为jng poc2
...
jj c,poc3 ;第三次宏调用展开为jc poc3
...
mov ah,4ch
int 21h
cseg ends
end start
例5: 定义一个宏求三个数之和
add macro opr1,opr2,opr3,result ;宏定义
push cx ;现场保护
push si
mov ax,opr1
add ax,opr2
add ax,opr3
mov result,ax
pop si ;现场恢复
pop cx
endm
dseg segment
num1 dw 1,2,3
sum1 dw ?
num2 dw 1234h,56A0h,4538h
sum2 dw ?
dseg ends
cseg segment
assume cs:cseg,ds:dseg
start:mov ax,dseg
mov ds,ax
add num1,num1+2,num1+4,sum1 ;第一次宏调用
add num2,num2+2,num2+4,sum2 ;第二次宏调用
purge add ;取消add的宏功能
mov ah,4ch
int 21h
cseg ends
end start
注意:当宏的名子与系统操作码相同时,宏的优先级高
例6: 定义一个宏,统计字符串中0-9出现的次数(对于宏体中出现的标号要用LOCAL伪指令定义) ;hong.asm
count09 macro si,cx,dl ;宏定义(si指向串的首地址,cx
为串的长度,dl统计个数)
local comp,next ;定义标号
push cx ;现场保护
push si
push dx
mov dl,0
comp: mov al,[si]
cmp al,'0'
jl next
cmp al,'9'
jg next
inc dl
next: inc si
loop comp
pop dx ;现场恢复
pop si
pop cx
endm
dseg segment
str1 db 'the number is 163.'
len1 equ $-str1
str2 db 'the sum is 1234.'
len2 equ $-str2
num db ?,?
dseg ends
cseg segment
assume cs:cseg,ds:dseg
start:mov ax,dseg
mov ds,ax
lea si,str1
mov cx,len1
count09 si,cx,num ;第一次宏调用
lea si,str2
mov cx,len2
count09 si,cx,num+1 ;第二次宏调用
mov ah,4ch
int 21h
cseg ends
end start
注意:LOCAL伪指令必须放在宏的首部
8.参考资料:《IBM-PC汇编语言程序设计》沈美明
9.作业: P278习题7
10.本章小结:
本部分要求宏定义和宏调用,理解宏展开,注意宏和子程序的相似和区别。