第三章 宏汇编语言

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

如:
定位类型:告诉连接程序,前段放完后,后一段将从 什么起始地址边界存放。
汇编语言程序设计 19
PAGE(页):表示此段物理地址起始地址后8位为0 即×××× ×××× ×××× 0000 0000 PARA(节):表示此段物理地址起始地址后4位为0 即×××× ×××× ×××× ×××× 0000 WORD(字):表示此段必须从字的边界开始 即×××× ×××× ×××× ×××× ×××0 BYTE(字节):表示此段可以从任何地址开始 即×××× ×××× ×××× ×××× ××××
10
汇编语言程序设计
例:OPE DB 1,2 OPER DW 1234H,5678H : : MOV AX,OPE ; ×类型不一致 MOV AL,OPER
怎样将字节变量的头两个字节数据 16位寄存器呢? 同理,将字变量的一个字节数据 字节寄存器。 方法1:MOV AL,OPE MOV AH,OPE+1 MOV AX,OPER ;破坏AH中内容 方式2:LEA MOV LEA MOV BX,OPE AX,[BX] BX,OPER AL,[BX]
汇编语言程序设计 3
3.变量
定义:数据存放地址的符号表示 变量有三种属性: 段属性:变量所在段的段首址 偏移地址属性:段首址到变量处的字节个数 类型属性:字节或字等类型,由类型定义伪指令定义。 DB:字节类型--1个字节 DW:字类型--2个字节 DD:双字节类型--4个字节 DQ:四字类型--8个字节 DT:十字节类型--1个数据占10个字节
汇编语言程序设计 16
(3)SEG 格式:SEG变量或标号 功能:取出其后的变量或标号所在段的段首址 例:MOV BX,SEG OPE ;将OPE所在段的段首址送BX。 例子: DAT SEGMENT A DW 50,100,-70H B DB ‘ABCDEF’,5 DUP(0) C DW C-B ;变量C中的内容为以B为首址的数据存贮区 所占字节数 DAT ENDS : MOV AX,SEG B ;DAT AX,将B所在段的段首址 AX MOV BX,OFFSET B ;6 BX,将B偏移地址是 BX MOV CX,TYPE B ;回送B变量的类型表示的字节数;即1 CX MOV AX,A+2 ;(A+2)=100 AX,以A为首址再向下位移2个 : 字节的内容 AX
其它算符的功能见书。 关于数值回送操作符: TYPE:取类型算符 LENGTH:取存贮单元个数算符 SIZE:取存贮区大小算符 OFFSET:取偏移地址算符 SEG:取段首址算符 功能:把一些特征或存贮器地址的一部分作为数值回送。 THIS(定义类型算符) 格式:THIS BYTE WORD DWORD NEAR FAR
问:(1)若执行下列指令后,(AX)=? LEA BX,M MOV AX,[BX+4] ;(AX)= 4202H
(2)变量A,BUF,B,D,M的EA=?分别为:0,2,6,8,12
汇编语言程序设计 9
A+0 +1 BUF+0 +1 +2 +3 B+0 +1 D+0 +1 +2 +3 M+0 +1 +2 +3 +4 +5
0CH 00 ’A’ ’B’ 0AH 0DH 0AAH 0FFH 2 0
若DW存 地址,则 取它的EA 初始化变量
DATA
01 01 02 ’B’ 2 ’B’
若用DD存地址, 则取它的EA初始化 前一个字单元,取 段首址初始化第二 字单元。
+6 ‘1’ +7 ‘2’ +8 ‘3’ +9 1 +0AH 2 +0BH 3
汇编语言程序设计 17
若将A中的第一个字节的内容送DI的高8位,同时将C中的第一个 字节内容送DI的低8位 MOV AH,BYTE PTR A MOV DI,AX MOV AL,BYTE PTR C 算符优先级: 高 括号(圆括号,方括号,尖括号),SIZE,LENGTH : PTR OFFSET,SEG,TYPE,THIS HIGH,LOW *,/,MOD,SHL,SHR +,EQ,NE,LT,LE,GT,GE NOT AND OR,XOR 低 SHORT
汇编语言程序设计
11
方式3:利用属性操作符PTR完成。 关于汇编属性操作符: PTR --类型运算符 : --段跨越前缀符 SHORT THIS --定义类型算符 HIGH 字节分离算符 LOW 类型运算符: PTR 格式:类型 PTR 地址表达式 其中:类型为: BYTE 字节 WORD 字 DWORD 双字 NEAR 段内 FAR 段外
汇编语言程序设计 18
三.段定义伪指令 1.段定义伪指令 格式:段名 SEGMENT [定位类型] [组合类型] [„类型’] 段名 ENDS 其中:• 段名为用户自己定义的标识符:可以定义数据段, 附加数据段,堆栈段和程序代码段。 • 定位类型,组合类型,类别分别用来指明段名的属性, 一般在特定情况下选用,它们提供段的属性给连接装配 程序,用于对各段装配时使用。
功能:分配存贮单元并赋值
例如: P DB 10,4,10H P1 DW 100 P2 DD 3*20,0FFFDH
60d
0FFFDH
7
汇编语言程序设计
例:MESS DB 'HELLO’ MM DW ‘AB’ MESS+0 +1 +2 +3 +4 MM+0 +1
;定义字符串
„H‟ ‟E‟ ‟L‟ Βιβλιοθήκη BaiduL‟ ‟O‟ ‟B‟ „A‟ 47H 45H 4CH 4CH 4FH 42H 41H
汇编语言程序设计 12
例如:在上例中 在运算时重新定义OPE的类型为字 : (但OPE类型并没有改变) : MOV AX,WORD PTR OPE ;0201H AX MOV AL,BYTE PTR OPER ;34H AL 重新定义OPER类型为字节 PTR是用来指派操作数的类型。 例:MOV [BX],0 ×;0是立即数没有类型,[BX]类型不明确 MOV WORD PTR [BX],0 汇编程序规定: 单操作指令中的操作数的类型必须明确,且不能为立即数。 双操作指令中, 如果两个操作数的类型均明确,则类型必须一致。 如果一个操作数的类型明确,另一个模糊,则两个操作数类型 以明确的那一个为准。 汇编语言程序设计 13
3.2 伪指令语句
包括:符号定义语句 数据定义语句 段定义语句 过程定义语句 结束语句 作用:为汇编程序服务,如给变量按类型分配存贮单元,说明 段和过程属性等。
汇编语言程序设计 5
一.符号定义伪指令
1.等价伪指令 格式:符号名 EQU 表达式 用途:给符号名定义一个值,或别的符号名,或一条可执行命 令等。 例如:PORT EQU 256 BUF EQU PORT+2 2.等号伪指令 格式:符号名=表达式 如:EMP=6 EMP=9 注:• 等号伪指令可以给已定义符号名重新定义值,而等 价伪指令不能对符号名重新定义值。 • 不为已定义的符号名分配存贮单元。
不能用PTR改变寄存器的类型 MOV AL,BYTE PTR SI
汇编语言程序设计
;× 类型不一致 ;(NUM)=2211H AX ;(NUM)=11H BL ;NUM的EA SI ;×类型均不明确 ;×类型不明确 ;OPD=[SI]=NUM
×
14
地址表达式中不允许出现不带方括号的寄存器号 MOV AX,SI+5 ×
二.表达式
由常量,变量,标号与一些运算符组成有意义的式子。 表达式的类型:数值表达式:结果为数值常量,有大小, 无属性。 地址表达式:结果为地址偏移量,具有段,偏移地址和 类型三种属性。 1 汇编语言程序设计
1.常数
(1)数值常数: 二进制常数:以字母B结尾,0和1组成的序列:0111001B 十进制常数:以字母D结尾(或省略),由0-9的数字组成 的序列。 十六进制常数:以字母H结尾,由0-F组成的序列。 八进制常数:以字母Q结尾,由0-7组成的序列,如:12345Q (2)串常数:由单引号括起来的一个或多个字符组成。 如:'A' , 'ABC'
如: ABC DB ?,0,?,4 ;“?”表示分配存贮空间,但不存入数据 AB DB 0,0,0,0 ; AB DB 4 DUP(0) DUP( )为复制操作符
汇编语言程序设计
8
例:DATA SEGMENT A DW M BUF DB ‘AB’,0AH,0DH CON EQU 500H B DW 0FFAAH D DD BUF M DB 2 DUP(1),2 DUP(2,’B’),’123’,1,2,3 DATA ENDS
第三章 宏汇编语言
3.1 宏汇编语言的语法成分 一.宏汇编语言的基本组成 1.字符集:ASCII码表中的字符 2.基本语句 机器指令语句:对应机器的一种操作,产生对应的目标代码。 伪指令语句:不产生对应的目标代码,伪汇编程序服务。 宏指令语句:用一条语句定义一组语句指令,产生一组机器 指令的目标代码或一组伪指令定的功能。 3.基本的语法单位:常量,变量,标号,表达式
(2)逻辑运算符
按位操作运算符:AND(与),OR(或),XOR(异或),NOT(非) 注:运算法则同对应的指令运算法则
参加运算的必须是数字,结果是数字,只用于数值表达式中。
如:AND DX,789AH AND 0FH(立即数);0AH∧(DX)=>DX (3)关系运算符:EQ , NE , LT , GT , LE , GE 参加运算的两个对象必须是数字,或同一段中两个单元地址(EA) 结果:真值为:0FFFFH(全‚1”),假值为0(全‚0”) 如:MOV BX,3 LT 5 立即数 ;(BX)=0FFFFH
例:DATA SGEMENT NUM DB 11H,22H,33H DATA ENDS : MOV AX,NUM MOV AX,WORD PTR NUM MOV BL,NUM MOV SI,0FFSET NUM ADD 2[SI],2 INC [SI] DEC BYTE PTR [SI] MOV BYTE PTR 2[SI],’A’ :
汇编语言程序设计 6
二.数据定义伪指令
格式:[变量名] DB DW DD DQ DT 表达式[,…];注释 P+0 +1 +2 P1+0 +1 P2+0 +1 +2 +3 +4 +5 +6 +7 0AH 04H 10H 64H 00H 3CH 00 00 00 0FDH 0FFH 00 00 10d 100d
2.运算符
• 算术运算符 • 逻辑运算符 • 关系运算符 (1)算术运算符:+,-,*, /, MOD, SHR (右移),SHL(左移) 其中:SHR,SHL表示将常量右移或左移运算符,右边所规定的 次数(整数),空出的数位均补0。
汇编语言程序设计 2
如:MOV AL,A SHR 3
(立即数)
若A=11111111B,则: 表达式:A SHR 3, 结果为 00011111B => AL
功能:为当前的符号指定类型, 与制定下一个能分配的存储单 元共首址,常与连用
汇编语言程序设计 15
例:DATA SEGMENT A 11H B B EQU THIS BYTE 4个 22H A DD 44332211H 双字 字节 33H W DW 0FFFFH 44H C EQU WORD PTR A W 0FFH DATA ENDS 一个字 0FFH (1)TYPE 格式:TYPE变量或标号 功能:若是变量:回送该变量以字节数表示的类型:DB为1, DW为2,DD为4,DQ为8,DT为10。 若是标号:回送代表该标号类型的数值:NEAR为0FFFFH, 如:AR DW 1,2,3 FAR为0FFFEH。 : ADD SI,TYPE AR ;2+(SI) SI (2)OFFSET 例:MOVE SI,OFFSET BUF
寄存器号决定字或字节类型。 4.标号
定义:机器指令语句存放地址的符号表示,也可表示过程名。 用于:转移指令和CALL语句的操作数项。
汇编语言程序设计 4
标号有三种属性:段,偏移地址及类型。 段属性:指定义该标号所在段的段首址。 偏移地址属性:标号的偏移地址为16位无符号数,它表示段 起始地址到定义标号的位置之间的字节数。 类型属性:指定标号在本段使用,还是在其它段中使用: NEAR:本段使用 FAR:段外使用
相关文档
最新文档