第五章 汇编语言程序设计
难点和重点
1. 变量通过伪指令DB、DW、DD、DQ、DT来定义
DB定义的是字节变量,DW定义的是字变量;DD定义的是双字变量,DQ定义的是长字变量;DT定义的是一个十字节变量。当变量为DW和DD类型时,才可以作为地址表达式,此时应遵循以下规则:
(l)当用DW定义地址表达式时,地址表达式中的变量名称表示该变量的第一个存储单元的偏移地址。
(2)当用DD定义地址表达式时,低位字用于预置偏移地址,高位字用于预置段地址。
(3)地址表达式中的变量或标号可与常数值相加减。对于变量来说运算结果的类型不变;对标号来说,运算结果仍表示原标号所在段中的偏移地址。
(4)变量或标号不能与变量或标号相加,但可相减,结果是没有属性的纯数值。
2.源程序模块
一个源程序模块能允许包括多个代码段和其它段,也允许多次使用ASSUME语句,重新约定段寄存器和段的关系。但 ASSUME语句并不意味着汇编后这些段地址已经装入相应的段寄存器中了,除了CS寄存器以外,其它各个段寄存器的实际值,还要用MOV指令来赋值,例如:
┆
MYCODE SEGMENT
ASSUME CS:MYCODE,DS:MYDATA,ES:MYEXTRA,SS:MYSTACK
START:MOV AX , MYDATA
MOV DS , AX
MOV AX , MYEXTRA
MOV ES , AX
MOV AX , MYSTACK
MOV SS , AX
┆
MYCODE ENDS
然而,也不能只用赋值语句而将ASSUME语句省略,这样汇编程序就找不到所定义的各个段。
3.跳转表法
当程序是CASE结构,即需引出多个分支时,最好利用跳转表法。其主要设计思想是:首先将n个选择项所对应的n个分支程序的标号存放在一个数据表(即跳转表)中,然后判别程序是否满足第一个条件,若满足就根据分支程序标号在跳转表中存放的地址将程序转入相应的分支;否则继续判别下个条件是否满足,……。下面程序主要实现一组选择项(5个)存于AL寄存器中,要根据AL中为1的位将程序分别转移到相应的分支:
BRANCH SEGMT
BRANTAB DW ROUTINE1
DW ROUTINE2
DW ROUTINE3
DW ROUTINE4
DW ROUTINE5
BRANCH ENDS
ROUTINE SEGMENT
MAIN PROC FAR
ASSUME CS:ROUTINE,DS:BRANCH
START: PUSH DS
SUB BX , BX
PUSH BX
MOV BX , BRANCH
MOV DS , BX
CMP AL , 0
JE DONE
LEA BX , BRANCH
CTINUE: SHR AL , l
JNC NOTYET
JMP WORD PTR [BX]
NOTYET: ADD BX , TYPE BRANCH
JMP CTINUE
DONE:
ROUTINEI:
ROUTINEZ:
第五章 汇编语言程序设计 来自淘豆网www.taodocs.com转载请标明出处.