1 / 56

第四章 汇编语言

4.1 汇编语言语句种类及其格式 1. 基本语句 机器指令语句:对应机器的一种操作,产生对应的目标代码。 伪指令语句:不产生对应的目标代码,伪汇编程序服务。 宏指令语句:用一条语句定义一组语句指令,产生一组机器 指令的目标代码或一组伪指令定的功能。 2. 指令语句 格式: [ 标号: ] 指令助记符 [ 操作数 [ ,操作数 ]] [ ;注释 ] 3. 伪指令语句 格式: [ 符号名 ] 伪指令 [ 参数, …… ,参数 ] [ ;注释 ].

cicily
Télécharger la présentation

第四章 汇编语言

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 4.1 汇编语言语句种类及其格式 1.基本语句 机器指令语句:对应机器的一种操作,产生对应的目标代码。 伪指令语句:不产生对应的目标代码,伪汇编程序服务。 宏指令语句:用一条语句定义一组语句指令,产生一组机器 指令的目标代码或一组伪指令定的功能。 2.指令语句 格式:[标号:] 指令助记符 [操作数[,操作数]] [;注释] 3.伪指令语句 格式:[符号名] 伪指令 [参数,……,参数] [;注释] 第四章 汇编语言 汇编语言程序设计

  2. 4.标识符(Identifier) • 指令语句中的标号和伪指令语句中的符号名统称为标识符。它们是由若干字符构成的。标识符的组成规则如下: • 字符个数不多于31个; • 第一个字符必须是字母,问号“?”,“@”或下划线“_”这四种字符中的一个; • 从第二个字符开始,可以是字母,数字,?,@或_; • 不能使用属于系统专用保留字(Reserved word)。 汇编语言程序设计

  3. 4.2汇编语言数据及伪指令 一、汇编语言数据 1.常数 (1)数值常数: 二进制常数:以字母B结尾,0和1组成的序列:0111001B 十进制常数:以字母D结尾(或省略),由0-9的数字组成 的序列。 十六进制常数:以字母H结尾,由0-F组成的序列。 八进制常数:以字母Q结尾,由0-7组成的序列,如:12345Q (2)串常数:由单引号括起来的一个或多个字符组成。 如:‘A’ , ’ABC’ 汇编语言程序设计

  4. 常数主要出现在: (1)在指令语句的源操作数中作立即数,它应与目的操作数的位数相一致,可以是8位或16位二进制数。 (2)在指令语句的寻址方式中作位移量。如: (3)在数据定义伪指令中。 汇编语言程序设计

  5. 2.变量 定义:数据存放地址的符号表示 变量有三种属性: 段属性:变量所在段的段首址 偏移地址属性:段首址到变量处的字节个数 类型属性:字节或字等类型,由类型定义伪指令定义。 DB:字节类型--1个字节 DW:字类型--2个字节 DD:双字节类型--4个字节 DQ:四字类型--8个字节 DT:十字节类型--1个数据占10个字节 汇编语言程序设计

  6. 在数据定义伪指令语句的操作数部分中,所示的表达式就是给定义的变量预置的初值,它们有如下几种情况:在数据定义伪指令语句的操作数部分中,所示的表达式就是给定义的变量预置的初值,它们有如下几种情况: ①数值表达式:例如: DA_BYTE DB 23H,23 DA_WORD DW 0ABFH,1234H ②?表达式:不带引号的 ? 表示可预置任何内容。 例如 DA_B DB ?,? DA_W DW ?,? 汇编语言程序设计

  7. ③字符串表达式: • 对于DB伪指令,为字符串中每一个字符分配一个字节单元。字符串必须是用引号括起来的不超过255个字符。字符串自左至右以字符的ASCII编码按地址递增的排列顺序依次存放。例如: • STRl DB ‘ABCDEF’ • 在存储器中存放的情况如图4.1(a)所示。 • 对于DW伪指令,可以给两个字符组成的字符串分配两个字节存储单元,而且这两个字符ASCII码的存储顺序是前一字符在高字节,后一字符在低字节。每一个数据项只能是1~2个 • STR2 DW ‘AB’,‘CD’,‘E’ 汇编语言程序设计

  8. ④带DUP表达式:DUP是定义重复数据操作符。在表达式中,使用DUP操作符格式是: • DB • DW • [变量名] DD 表达式1 DUP(表达式2) ;注释 • DF • DQ • DT • 其中表达式1是重复的次数,表达式2是重复的内容。 • 例如: • D_DB1 DB 10H DUP(?) • D_DB2 DB 10H DUP(‘AB’) • D_DWl DW 10H DUP(9) • DUP操作符可以嵌套使用,即表达式2可以又是一个带DUP的表达式。例如 • D_DB3 DB 10H DUP(3,2 DUP(8),6) • 表示重复10H个数据序列“3,8,8,6”,共占有40H个字节单元 汇编语言程序设计

  9. 变量的使用 • 在指令语句中:如要对某存储单元进行存取操作,就可直接引用它的变量名(即符号地址), 例如: • DA1 DB 0ABH • DA2 DW 34A5H • : • MOV AL ,DA1 • MOV BX ,DA2 • 在许多指令语句中,无论在源操作数还是目的操作数中,采用了寄存器相对寻址或相对基址变址寻址。这时,引用一个变量名就是取用它的偏移量。例如: • DA3 DB 10H DUP(?) • DA4 DW 10H DUP(1) • : • MOV DA3[SI],BL • ADD AX,DA4[BX][DI] 汇编语言程序设计

  10. 在伪指令语句中:例如: • NUM DB 26H • SZ1 DW 10H DUP(0) • DZl DW NUM • DZ2 DD NUM • DZ3 DW SZ1[2] 汇编语言程序设计

  11. 例: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 问:(1)若执行下列指令后,(AX)=? LEA BX,M MOV AX,[BX+4] ;(AX)= 4202H (2)变量A,BUF,B,D,M的EA=?分别为:0,2,6,8,12 汇编语言程序设计

  12. 若DW存 地址,则 取它的EA 初始化变量 A+0 0CH +1 00 BUF+0 ’A’ +1 ’B’ +2 0AH +3 0DH B+0 0AAH +1 0FFH D+0 2 +1 0 +2 +3 M+0 01 +1 01 +2 2 +3 ’B’ +4 2 +5 ’B’ 若用DD存地址, 则取它的EA初始化 前一个字单元,取 段首址初始化第二 字单元。 +6 ‘1’ +7 ‘2’ +8 ‘3’ +9 1 +0AH 2 +0BH 3 DATA 汇编语言程序设计

  13. 3.标号 定义:机器指令语句存放地址的符号表示,也可表示过程名。 用于:转移指令和CALL语句的操作数项。 标号有三种属性:段,偏移地址及类型。 段属性:指定义该标号所在段的段首址。 偏移地址属性:标号的偏移地址为16位无符号数,它表示段 起始地址到定义符号的位置之间的字节数。 类型属性:制定符号在本段使用,还是在其它段中使用: NEAR:本段使用 FAR:段外使用 汇编语言程序设计

  14. 设置标号距离属性可以有以下两个办法 ①隐含方式:当在指令语句中,使用标号后,它就隐含有NEAR属性。如: ┇ LOPl:MOV AX,30H ┇ 这时,标号LOPl的距离属性为NEAR,表示它只能被本段的转移和调用指令所访问。隐含方式不可能有FAR属性。 汇编语言程序设计

  15. ②用LABEL伪指令赋予标号的距离属性。LABEL伪指令格式是:②用LABEL伪指令赋予标号的距离属性。LABEL伪指令格式是: 名称 LABEL 类型 其中名称是一个标识符,它可作为一个标号,也可作为一个变量名。伪指令LABEL通常要与指令语句或用DB、DW、DD伪指令的数据定义语句连用。这时,名称就为与之连用的指令或变量建立一个新的标识符(即新的标号或变量名),以便补充或设置与之连用的指令或变量的类型属性。因此,这个伪指令的名称同样有段、偏移量、类型三个属性。若与指令连用,类型属性分为NEAR和FAR两种;若与变量连用,类型属性就分为BYTE、WORD和DWORD等。它的段和偏移量同与之连用的指令或变量相同。 汇编语言程序设计

  16. 二、表达式与运算符 • 表达式 • 算术运算符 • 逻辑运算符 • 关系运算符 • 分析操作符 • 属性操作符 • 运算符优先级 表达式是操作数常见的形式,它是由常数、变量、标号通过操作运算符连接而成的。任一表达式的值是在程序汇编过程中进行计算确定的,不是在程序运行时求得的。 (1)算术运算符:+,-,×, /,MOD,SHR (右移),SHL(左移) 其中:SHR,SHL表示将常量右移或左移运算符,右边所规定的 次数(正数),空出的数位均补0。 汇编语言程序设计

  17. 如:MOV AL,A SHR 3 (立即数) 若A=11111111B,则: 表达式:A SHR 3, 结果为00011111BAL (2)逻辑运算符 按位操作运算符:AND(与),OR(或),XOR(异或),NOT(非) 注:运算法则同对应的指令运算 参加运算的必须是数字,结果是数字,只用于数值表达式中。 如:AND DX,789AH AND 0FH(立即数) (3)关系运算符:EQ , NE , LT , GT , LE , GE 参加运算的两个对象必须是数字,或同一段中两个单元地址(EA) 结果:真值为:0FFFFH(全“1”),假值为0(全“0”) 如:MOV BX,3 LT 5 ;(BX)=0FFFFH 立即数 汇编语言程序设计

  18. (4)分析操作符 • TYPE • 格式:TYPE变量或标号 • 功能:若是变量:回送该变量以字节数表示的类型:DB为1, • DW为2,DD为4,DQ为8,DT为10。 • 若是标号:回送代表该标号类型的数值:NEAR为0FFFFH, • FAR为0FFFEH。 • LENGTH:取存贮单元个数算符 • SIZE:取存贮区大小算符 • SEG:取段首址算符 • OFFSET:取偏移地址算符 汇编语言程序设计

  19. 例: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 汇编语言程序设计

  20. (5)属性操作符PTR 格式:类型 PTR 地址表达式 其中:类型为: BYTE 字节 WORD字 DWORD双字 NEAR段内 FAR段外 汇编语言程序设计

  21. 例如:在上例中 : : MOV AX,WORD PTR OPE ;0201H AX MOV AL,BYTE PTR OPER ;34H AL 在运算时重新定义OPE的类型为字 (但OPE类型并没有改变) 重新定义OPER类型为字节 PTR是用来指派操作数的类型。 例:MOV [BX],0 ×;0是立即数没有类型,[BX]类型不明确 MOV WORD PTR [BX],0 汇编程序规定: 单操作指令中的操作数的类型必须明确,且不能为立即数。 双操作指令中, 如果两个操作数的类型均明确,则类型必须一致。 如果一个操作数的类型明确,另一个模糊,则两个操作数类型 以明确的那一个为准。 汇编语言程序设计

  22. 例:DATA SGEMENT NUM DB 11H,22H,33H DATA ENDS : MOV AX,NUM ;×类型不一致 MOV AX,WORD PTR NUM ;(NUM)=2211H AX MOV BL,NUM ;(NUM)=11H BL MOV SI,0FFSET NUM ;NUM的EA SI ADD 2[SI],2 ;×类型均不明确 INC [SI] ;类型不明确 DEC BYTE PTR [SI] ;OPD=[SI]=NUM MOV BYTE PTR 2[SI],’A’ : 不能用PTR改变寄存器的类型MOV AL,BYTE PTR SI × 地址表达式中不允许出现不带方括号的寄存器号 MOV AX,SI+5 × 汇编语言程序设计

  23. (6)算符优先级: 括号(圆括号,方括号,尖括号),SIZE,LENGTH : PTR OFFSET,SEG,TYPE,THIS HIGH,LOW *,/,MOD,SHL,SHR +,- EQ,NE,LT,LE,GT,GE NOT AND OR,XOR SHORT 高 低 汇编语言程序设计

  24. 三、 伪指令语句 包括:符号定义语句 数据定义语句 段定义语句 过程定义语句 结束语句 作用:为汇编程序服务,如给变量按类型分配存贮单元,说明 段和过程属性等。 汇编语言程序设计

  25. 1.符号定义伪指令 • 等价伪指令 • 格式:符号名 EQU 表达式 • 用途:给符号名定义一个值,别的符号名,一条可执行命令 • 等。 • 例如:PORT EQU 256 • BUF EQU PORT+2 • 等号伪指令 • 格式:符号名=表达式 • 如:EMP=6 • EMP=9 • 注:•等号伪指令可以给已定义符号名重新定义值,而等 • 价伪指令不能对符号名重新定义值。 • •不为已定义的符号名分配存贮单元。 汇编语言程序设计

  26. 2.过程定义伪指令 格式:过程名 PROC [NEAR]/FAR : RET 过程名 ENDP 汇编语言程序设计

  27. 3.置汇编地址计数器伪指令 汇编地址计数器用$符号表示。每汇编一个新段,则把汇编地 址计数器置为0,然后按语句汇编后的长度增值。段内的所有 标号或变量的偏移地址就是$的值。 如:DATA SEGMENT BUF DB ‘12345’ COUN EQU $-BUF ;COUN的值为BUF数据区所占的字节数, 即COUN=5 A DB ‘$’ DATA ENDS 汇编语言程序设计

  28. 设置汇编地址计数器的值的伪指令ORG 格式:ORG 数值表达式 功能:将汇编地址计数器设置成数值表达式之值(其值为 0-65535之间的非负整数) 如:DATA SEGMENT ORG 10 BUF DB ‘ABCD’ ORG $+5 NUM DW 50 DATA ENDS ;设置$的值为10,即该段的目标代码从偏移地址10处开始产生 ;变量BUF的偏移地址为10 ;$的值增5,即空出5个字节 ;变量NUM的偏移地址为19 其它伪指令:命令伪指令,结束伪指令等见书。 汇编语言程序设计

  29. 4.3汇编语言程序的段结构 一、完整的段结构 1.段定义伪指令 格式:段名 SEGMENT [定位类型] [组合类型] [‘类型’] … 段名 ENDS 其中:• 段名为用户自己定义的标识符:可以定义数据段, 附加数据段,堆栈段和程序代码段。 • 定位类型,组合类型,类别分别用来指明段名的属性, 一般在特定情况下选用,它们提供段的属性给连接装配 程序,用于对各段装配时使用。 如: 定位类型:告诉连接程序,前段放完后,后一段将从 什么起始地址边界存放。 汇编语言程序设计

  30. PAGE(页):表示此段物理地址起始地址后8位为0PAGE(页):表示此段物理地址起始地址后8位为0 即×××× ×××× ×××× 0000 0000 PARA(节):表示此段物理地址起始地址后4位为0 即×××× ×××× ×××× ×××× 0000 WORD(字):表示此段必须从字的边界开始 即×××× ×××× ×××× ×××× ×××0 BYTE(字节):表示此段可以从任何地址开始 即×××× ×××× ×××× ×××× ×××× 省略定位类型,即为PARA 组合类型:告诉连接程序,本段与其它段的关系。 汇编语言程序设计

  31. NONE:本段与其它段在逻辑上不发生关系,每段有自己的NONE:本段与其它段在逻辑上不发生关系,每段有自己的 基地址:隐含的组合类型。 PUBLIC:把本段与同类别的其它段相邻地连在一起,给定 一个共同段基地址,大小不超过64K。 STACK:指定该段在运行时为堆栈的一部分。 COMMON:连接程序为本段与其它同名同类别段指定相同 的基地址,产生覆盖存贮。 AT表达式:连接程序把本段装在表达式的值所指定的段地址 上,它不能指定代码段。 MEMORY:连接程序将把本段定位在被连接一起的其它所有 段之上。 例:DAT1 SEGMENT A DB 55H DUP(0FFH) DAT1 ENDS DAT2 SEGMENT DB 64H DUP(0) DAT2 ENDS 它们均未指定定位方式,即 定位方式为PARA,连接后: 一般选用PARA定位形式。 汇编语言程序设计

  32. 1000H:0000H 0FFH 1000H:0001H 0FFH : : : : 1000H:0054H 0FFH 1000H:0055H : : : 1000H:005FH : 1006H:0000H 00 : : 1006H:0063H 00 DAT1 DS DAT1段 共55H个 字节 1000H 两个段 之间浪费 1个字节 DAT2 ES DAT2段 共64H 字节 1006H 若选用WORD,说明DAT2物理首址为偶数开始 即1000H:0056H,只浪费1个字节单元 若用BYTE,不浪费单元 若DAT2选用PAGE,则DAT1与DAT2之间浪费171个字节单元。 汇编语言程序设计

  33. 例:组合类型: 一个大型汇编源程序可能会有若干个模块组成(一个以END结束 为一个模块),模块内可能包含若干个段,当把模块连接装配 起来时,会出现多个代码数据段或堆栈段的情况。给程序编号 与调试带来不变,加之PC的CPU一次只能同时访问4个段,因此 可利组合类型指示连接程序,将各模块的相同性质的段组合成 一个数据段,一个堆栈段,在编写程序时不考虑段的连接问题。 类别为单引号括起来的字符串,一般为:‘CODE’,’DATA’, ‘DATA’,’STACK’ 功能:按类别名相同的段(段名不一定相同)组织起来存放 在连接的存贮区中。 如:A SEGMENT ‘DATA’连接后,在生成.EXE中,位置为: B SEGMENT ‘CODE’ A SEGMENT ‘DATA’ C SEGMENT ‘DATA’ C SEGMENT ‘DATA’ B SEGMENT ‘CODE’ 汇编语言程序设计

  34. 模块1 0000H:0000H 00 : : 0000H:0054H 00 空11个字 节单元 0000H:0060H 0FFH : 0000H:0162H 0FFH 空13个字 节单元 0017H:0000H 00 : 0017H:0201H 00 : : : A SEGMENT PARA PUBLIC ‘S’ A1 DB 55H DUP(0) A ENDS B SEGMENT PARA COMMON ‘S1’ B1 DB 202H DUP(0) B ENDS 邻接 存放 不超 过64K A段 模块2 B1和 B2公 共存 贮区 (覆 盖存 放) : A SEGMENT PARA PUBLIC ‘S’ A2 DB 103H DUP(0FFH) A ENDS B SEGMENT PARA COMMON ‘S1’ B2 DB 104H DUP(0) B ENDS B段 汇编语言程序设计

  35. 2.ASSUME伪指令 指明定义的当前段与段寄存器的关系 格式 :ASSUME段寄存器名:段名,段寄存器:段名,…… 例:A SEGMENT : AA DW 0FFH A ENDS B SEGMENT STACK : B ENDS C SEGMENT C1 DB ‘A’ C ENDS D SEGMENT : DD1 DW 11H : D ENDS E SEGMENT ASSUME CS:E,SS:B,DS:A,ES:D MOV AX,A MOV DS,AX MOV AX,D MOV ES,AX E1:MOV AX,AA E2:MOV DD,AX ASSUME DS:NOTHING ASSUME DS:C MOV AX,C1 : E ENDS 汇编语言程序设计

  36. 注:(1)每一次CPU最多访问4个段。 (2)必须用ASSUME建立CS,SS与代码段和堆栈段的关系。以 避免写跨段前缀。 (3)对于数据段,可用ASSUME建立与DS,ES的关系,也可不 用。同时,不必写跨段前缀。否则需写跨段前缀。 如:上例:如不用ASSUME建立A,D与DS,ES的联系,则必 在EI处写:EI:MOV AX,DS:AA 汇编语言程序设计

  37. 3.段寄存器的装入 • DS和ES的装入 • 在程序中,引用段名就是以立即数形式获取该段的段基值,而立即数又不能直接传送给段寄存器,所以一个段的段基值要经过通用寄存器传送给DS,ES。例如: • DATA_DS SEGMENT • DAl DB ? • DATA_DS ENDS • DATA_ES SEGMENT • DA2 DB ? • DATA_ES ENDS • CODE SEGMENT • ASSUME CS:CODE,DS:DATA_DS,ES:DATA_ES • START: MOV AX,DATA_DS • MOV DS,AX • MOV AX,DATA_ES • MOV ES,AX • ┇ • CODE ENDS 汇编语言程序设计

  38. SS的装入 • 装入办法有两个: • (1)段定义伪指令的组合类型项选择“STACK”参数,且在段寻址伪指令(Assume)语句中,把堆栈用的这个段指派给段寄存器SS。例如: • STACK1 SEGMENT PARA STACK • DB 60H DUP(?) • STACKl ENDS • ┇ • CODE SEGMENT • ASSUME CS:CODE,SS:STACKl • ┇ • 这样,当这个程序目标代码装入存储器后,SS中已自动装入STACK段的段基值,且堆栈指针SP也指向堆栈底部+1的存储单元(在上例中(SP)=60H)。 汇编语言程序设计

  39. (2)若在段定义伪指令的组合类型中,未选用“STACK”参数项,或在程序中要调换另一个堆栈段,可用类似于DS,ES的装入办法,且需几条指令来实现对SS和SP的装入。例如:(2)若在段定义伪指令的组合类型中,未选用“STACK”参数项,或在程序中要调换另一个堆栈段,可用类似于DS,ES的装入办法,且需几条指令来实现对SS和SP的装入。例如: STACK1 SEGMENT DW 50H DUP(?) TOP LABEL WORD STACK1 ENDS ┇ CODE SEGMENT ┇ MOV AX,STACK1 MOV SS,AX MOV SP,OFFSET TOP 上述示例中,假设STACK1段是程序中要使用的堆栈段(50H个字),那么TOP就是该堆栈的初始堆栈顶部。待用前两条指令把堆栈段的段基值装入SS后,紧接着必须用一条指令初始化堆栈指针SP(在示例中(SP)=100H)。中间不要插入另外的指令。 汇编语言程序设计

  40. CS的装入 • 在程序执行过程中,CS提供了当前执行目标代码的段基值,而IP提供下一条目标代码的偏移量。为保证程序的正确执行,CS和IP装入新值必须一起完成。对CS,IP的装入通常是: • (1)按照结束伪指令END指定地址装入CS和IP。任何一个源程序都以END伪指令来结束。这个伪指令的格式是: • END 起始地址 • 起始地址可以是一个标号或表达式。该起始地址是程序装入内存后,开始执行的起始点。通常,程序执行的第一条语句(不一定是源程序的第一条指令语句!)设置一个标号。如: • ┇ • CODE SEGMENT • ASSUME CS:CODE • BEGIN: MOV AX,DATA • ┇ • CODE ENDS • END BEGIN 汇编语言程序设计

  41. (2)在程序运行期间,当执行某些指令或操作时,CPU自动修改CS和IP使它们指向新的代码段,例如: (2)在程序运行期间,当执行某些指令或操作时,CPU自动修改CS和IP使它们指向新的代码段,例如: ·执行段间过程调用指令CALL和段间返回指令RET; ·执行段间无条件转移指令JMP; ·响应中断及中断返回指令IRET; ·执行硬件复位(RESET)操作。 以上几种情况,不需要程序员干预,程序自动修改CS、IP的内容。 汇编语言程序设计

  42. 二、简化的段结构 1、模式选择伪指令.MODEL 模式选择伪指令用来指定该汇编程序所使用的内存模式,内存模式说明了程序中的数据及代码的缺省长度。使用简化的段定义的程序必须使用.MODEL指出内存模式,格式如下: .MODEL 模式 模式可选择TINY、SMALL、MEDIUM、COMPACT、LARGE中的一种,一般选用SMALL模式。 2、数据段定义伪指令.DATA 伪指令.DATA定义数据段,格式如下: .DATA [段名] 若段名缺省,则隐含段名为_DATA。如果有多个数据段,就要用段名来区分。 汇编语言程序设计

  43. 3、代码段定义伪指令.CODE 伪指令.CODE代码段,格式如下: .CODE [段名] 若段名缺省,则隐含段名为_CODE。如果有多个代码段,就要用段名来区分。 4、堆栈段定义伪指令.STACK 伪指令.STACK定义堆栈段,格式如下: .STACK [长度] 长度的默认值为1024。 汇编语言程序设计

  44. 3.4常用的I/O系统功能调用 直接调用DOS中功能子程序(即在DOS级上调用):详见P405 系统功能 设备管理(I/O系统功能调用) 文件管理 目录管理 其它管理 调用的一般过程:•功能编号 AH,置入口参数 •执行软中断语句INT 21H •判错 常用的I/O系统功能调用: 1.键盘输入(调用功能号1) 调用格式:MOV AH,1 INT 21H 功能:等待从键盘输入一个字符并将输入字符的 ASCII码⇒AL,若按CTRL+BREAK退出 汇编语言程序设计

  45. 2.显示输出(调用功能号2) 调用格式:MOV DL,’a’;待显示字符(如‘a’)的ASCII码 DL MOV AH,2 INT 21H 功能:将DL中的字符送屏幕。若DL中为(CTRL+BREAK的ASCII 码,退出) 例:MOV DL,0DH MOV AH,2 INT 21H MOV DL,0AH INT 21H 显示回车 显示换行 3.打印输出(功能调用号5) 调用格式:MOV DL,’a’ ;待打印字符 DL MOV AH,5 INT 21H 功能:将DL中的字符打印 汇编语言程序设计

  46. 4.显示字符串(功能调用号9) 调用格式:LEA DX,字符串偏移地址 MOV AH,9 INT 21H 功能:将当前数据区中DS:DX所指向的以‘$’结尾的字符串送 屏幕显示。 注:若字符串中包含字符串‘$’,则不能采用本调用,只能循环 地使用2号调用。 例:DATA SEGMENT BUF DB ‘HOW DO YOU DO?$’ DATA ENDS : LEA DX,BUF MOV AH,9 INT 21H 输出字符串HOW DO YOU DO? 汇编语言程序设计

  47. 5.键盘输入字符串:(功能调用号:10(或0AH))5.键盘输入字符串:(功能调用号:10(或0AH)) 调用格式:LEA DX,存放字符串的首偏移地址 MOV AH,10 INT 21H 功能:从键盘上往DS:DX所指的输入缓冲区输入以回车键结束 的字符串,并送显示器显示。 对缓冲区的要求: 例如: BUF DB 80 DB ? DB 80 DUP(0) ;第一个字节存放缓冲区大小,不能 为0,用户确定 ;第二个字节存放实际输入的字符个数, 系统填入 ;从键盘上输入字符串从第三个字节存 放(如果超过则多余去掉,响铃告警) 汇编语言程序设计

  48. 举例:编程完成 (1)在屏幕上显示一行提示信息:“WHAT IS YOUR NAME?” (2)接受用户从键盘输入的信息,并存入内存缓冲区 S:MOV AX,DATA MOV DS,AX LEA DX,M MOV AH,9 INT 21H MOV DX,0FFSET P MOV AH,10 INT 21H MOV AH,4CH INT 21H CODE ENDS END S DATA SEGMENT P DB 100 DB ? DB 100 DUP(?) M DB ‘WHAT IS YOUR NAME?$’ DATA ENDS STACK SEGMENT STACK DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK 汇编语言程序设计

  49. 上机题 (1)从键盘上接受一个小号字母,将它变成对应大写字母并显示。 (2)从键盘上接受一个字符,显示它的前导字符和后继字符。 汇编语言程序设计

  50. 汇编程序上机过程及操作 一.上机环境及过程 1.环境: 必须准备下列软件: 操作系统:DOS(或UC-DOS) 编辑程序:WORDSTAR或SIDEKICK或TRURBO,EDIT等之一。 宏汇编程序:MASM.EXE,CREF 连接程序:LINK.EXE 调试程序:DEBUG.COM 库管理程序:LIB 2.过程 编辑TC产生 .ASM文件 宏汇编MASM 产生.OBJ文件 连接LINK 产生.EXE 调试DEBUG .EXE DOS下运行 .EXE 错 错 错 汇编语言程序设计

More Related