汇编语言第四章_(1,2)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
格式。其功能是把( )中的内容复制n次。DUP 可以嵌套。如: N DB 5 DUP(1,2)
例. M1 DB 15,67H,11110000B,? M2 DB ‘15’,’AB$’ M3 DW 4*5 等同20 M4 DD 1234H M5 DB 2 DUP(5,’A’) M6 DW M2 ;M2的偏移量 M7 DD M2 ;M2的偏移量、段基址 设以上数据自1470:0000开始存放,则为:
例.
BUF DB
31H,32H
;(AL)=?
MOV AL,BUF
MOV BX,WORD PTR BUF
;临时指定BUF为字型,(BX)=3231H
LEA DI,BUF * MOV BYTE PTR [DI],6
;必须明确指出DI指向字节型单元
或字型单元,否则汇编时出错
2)THIS操作符
格式:THIS 类型 功能:为存储器操作数指定类型。该操作数 地址与下一个存储单元具有相同的段基址和偏移 量。
说明:它并不为该存储器操作数分配空间。
与LABEL伪指令的功能有相似之处,而LABEL 是一条独立使用的伪指令。
例.
REDEW EQU THIS WORD
DEBYTE DB
25H,32H,56H,42H
REDEW和DEBYTE的段基址和偏移量均相 同,但类型不同.
前者是字型,后者是字节型。
判断对错
LENGTH 变量 SIZE 变量
SEG SEG
变量 标号
OFFSET 变量 OFFSET 标号
注[1]:若使用TYPE 变量,则返回一个数据项占用的字节数。 例若变量用DB定义,则返回1;用DW定义返回2……。若使用 TYPE 标号,则NEAR型标号返回-1,FAR型标号返回-2。 注[2]:SIZE=TYPE*LENGTH,只有在变量用<n> dup (操作 数,…)时表示该变量占用的字节数。其它情况失去实际意义。
2)数值回送操作符 这组操作符可以把一些特征或内存 单元地址的组成部分作为数值返回。
它们是TYPE 、 LENGTH 、 SIZE 、 SEG 、
OFFSET和$,PTR,其格式和功能见下表。
格
TYPE TYPE
式
变量 标号
功
能
返回变量或者标号的类型代码[1] 返回由<n> dup (操作数,…)格式定义的n值, 其它情况回送1 返回分配给变量的字节数,只对由<n> dup (操 作数,…)格式定义的变量有实际意义[2] 返回变量或者标号的段基址 返回变量或者标号的偏移量
0F 67 F0 00 31 35 41 42 24 14 00 34 12 00 00 05 41 05 41 04 00 04 00 70 14。
可直接通过变量名引用变量,但要注意类 型匹配。例如继续完成以下程序片段: MOV AL,M1 MOV BX,M3 ADD M3,6 MOV AL,M2 MOV BL,M2+2 MOV M1+3,BL
确定各段的类型
START: MOV AX,DATA MOV DS,AX …….. ………. MOV AX,4C00H INT 21H ……… CODE ENDS END START
程序开始点, 装入数据段 程序代码 程序结束
子程序代码 代码段结束
汇编结束,程序开 始点为标号
例. 编程实现123+456→SUM单元的功能。(程序4.1)
4.2.1
段定义伪指令
汇编程序两种基本格式: 1、完整段定义 2、简化段定义
一、完整段定义典型格式 Stack segment db 1024 dup (0) 堆栈段 Stack ends Data segment 数据段 ……. Data ends 代码段 Code segment assume cs:code,ds:data,ss:stack
...
含回车键在内的 M个字节缓冲区
表 输入缓冲区格式
例. 定义60个字符的缓冲区,并输入 一串字符。 BUFFER DB 60 ;定义缓冲区长度 DB ? DB 60 DUP(?)
这3步不能省略 ;设DS已是BUFFER的段基址
MOV LEA INT
AH,0AH ;接收一串字符 DX,BUFFER 21H
MOV [DI],6
CMP 15,BX
EQU、PTR、THIS 都为变量分配存
储空间
4.4
屏幕显示和键盘输入
4.4.1 DOS系统功能调用
在DOS环境下,汇编语言通过调用 ROM BIOS中断使用输入输出设备,还可
以通过DOS系统功能调用中断(INT 21H)
使用它们。
INT 21H系统功能调用方法:
汇编程序,如 (MASM.EXE)
汇 编
错误
目标模块:文件名.obj
连接程序,如 LINK.EXE
连 接
错误
可执行文件:文件名.exe
调试程序,如 DEBUG.EXE
调 试 应用程序
错误
4.2
伪操作(伪指令) Directives
伪指令是汇编程序对源程序进行汇编时处
理的操作,完成程序分段、存储模式定义、数 据定义、存储器分配、指示程序开始、结束等 功能。
综合举例:编程实现输出“What is your name”的提示信息,并等待从键盘输入一串字符 送给BUFFER缓冲区,见程序4.7 why1.asm 。
扩展程序:why2.asm
使用DOS功能调用比ROM BIOS中断调 用简单方便。 BIOS提供的功能INT 10H中断可以更全 面地控制屏幕,并且运行速度也要快得多。
3、属性操作符 属性操作符指定操作数的属性。 包括PTR、THIS、SHORT、HIGH和LOW操
作符。
1)PTR操作符
格式:类型 PTR 地址表达式
功能:指定地址表达式的类型。
说明: 若是变量的地址表达式,则类型可以是BYTE、 WORD、DWORD等。 若是标号的地址表达式,则类型可以是FAR、 NEAR。
STSG SEGMENT
DW 32
‘S’
DUP(?)
;①
STSG ENDS
DATA SEGMENT A B SUM DW DW DW 123 456 ?
DATA ENDS
CODE SEGMENT ASSUME cs:CODE,DS:DATA,SS:STASG,ES:NOTHING ;②
Start: MOV MOV MOV ADD MOV
AX, DATA DS, AX AX, AX, A B
;③
SUM, AX ;⑤
MOV AH,4CH
INT 21H
CODE ENDS
END start
;④
4.2.2、数据定义伪指令 数据定义伪指令用来定义程序中使用
的数据。 格式:[变量名] 助记符 操作数
功能:为变量(存储单元名)分配单
元,并为其初始化或者只预留空间。
M1+3指的是 ? ;(AL)= ;(BX)= ;(M3)= ;(AL)= ;(BL)=
15 20 26
’1’=31H ’A’=41H
;(M1+3)= 41H
4.2.3其他伪指令
赋值伪指令: EQU
模块定义伪指令: END 地址计数器: $ 设置偏移地址伪指令:ORG
1.等值EQU伪指令 格式:符号名 值。 说明:表达式可以是任何有效的操作数 格式。例如常数、数值表达式、另一符号名 或助记符。 注意:用EQU定义的符号在同一个程序中 不能再定义。 EQU 表达式
功能:用符号名代表表达式或表达式的
例. CR
ห้องสมุดไป่ตู้
EQU
0DH
;回车符的ASCII值
程序中可以通过符号引用这些值. 例如:
MOV AL,CR
;等价于 MOV AL, 0DH
EQU伪指令经常与$配合,得到变量分 配的字节数。
如下所示:
MSG DB Count ‘This is first string.’ equ $-MSG
Mov cl,count ;(CL)=MSG的串长=21
判断下列语句段是否正确: CT EQU 1 ……. mov ax,bx …… CT EQU 5
3. 地址计数器 $
使用地址计数器保存当前正在汇编的伪指 令或指令的地址。当前地址计数器的值用$ 表示。一般用于表达式。 如 ORG $+6 表示跳过6个字节
2.输出一个字符 功能号:2
调用参数:DL=字符的ASCII值
说明:该输出功能使光标跟随移动。
例. 输出一个字符Y。
MOV MOV AH ,2 DL ,’Y’
INT
21H
3.显示字符串 功能号:9
调用参数:DS:DX指向要输出的以$
结尾的字符串首地址 功能:输出字符串到标准输出设备
说明:要输出的字符串必须以$结束
3.操作数 操作数可以是数字常量、数值表达
式、字符串常量、地址表达式、?、<n>
DUP(操作数,……)形式。
1).数字常量及数值表达式
操作数可以是数值表达式。数字中若出 现字母形式,不区分大小写。如下所示: 十进制数:以D结尾.
2). 字符串常量
在汇编语言中字符需要用单引号 括起来,其值为字符的ASCII值。
4、设置偏移地址伪指令 ORG 数值表达式
功能:设置地址计数器内容为数值表达 式的值。 例1.ORG 100H ;设地址计数器值为100H
例2.ORG
$+6
;跳过6个字节的存储区
5.操作符
(1)算术操作符 包括+ 、 - 、 *、/和MOD(取模)
例. X CT MOV MOV ADD DW 12,34,56 EQU ($-X)/2 CX ,CT ;(CX)=? AX ,X AX ,X+2 ;(AX)=?
例.输出字符串 (exa.asm) PRINT DB ’What is your name$’
;以$结尾的要输出的字符串 ;设DS已指向PRINT的段基址
MOV AH,9
MOV DX,OFFSET PRINT
INT 21H
;输出“字符串”到显示器
4.输入字符串(**) 功能号:0AH
调用参数:DS:DX指向自定义的输入
第四章 汇编语言程序设计
本章要求: ① 能够编写简单的、完整的汇编语言源程序。
② 掌握上机操作,以验证程序设计及编码的 正确性。 主要内容:
汇编源程序结构、常用伪指令及基本指令、汇 编语言程序上机过程、数据的输入输出等。
4.1 汇编语言程序的开发过程
文本编辑器,如 EDIT.COM
编 辑
错误
源程序:文件名.asm
缓冲区首地址
功能:从标准输入设备(例如键盘)
输入一串字符到用户定义的缓冲区,直到
按下Enter键为止,在接收的同时显示到
屏幕上。
地址 0 1
2 3 4 … M+1
内容
缓冲区长度M
实际输入的字符个数 输入的第一个字符 输入的第二个字符 输入的第三个字符
说明
M≤255
系统自动计数并回填 不包括最后一个回车键
1.变量名是可选的,需要时由用户 自己起。它是该数据区的符号地址,也
是其中第一个数据项的偏移量。
2.助记符是数据类型的符号表示。
助记符 DB(BYTE) DW(WORD) DD(DWORD) DQ(QWORD) DF(FWORD) DT(TBYTE) 数据类型 字节型 字型 双字型 四字型 六字节型 10字节型
例.
ARY DW 4,5,6 COUNT EQU $-OFFSET ARY ;COUNT=?6 VAR DW 50 DUP(12) MOV AX, SEG VAR VAR的段基址→DS MOV DS, AX ; ?→DS ; (SI)+2→SI mov SI, TYPE ARY ; ?→SI MOV CX, LENGTH VAR; ?→CX ; 50→CX ; 100→cx MOV CX, SIZE VAR ; ?→CX ; 1→cx MOV CX, LENGTH ARY; ?→CX ; 2→cx MOV CX, SIZE ARY ; ?→CX
通常用DB助记符定义字符串。
例如,’A’的值为41H。 ’abc’的值为616263H。
3).
地址表达式
将常量、变量、标号、寄存器内容和
运算符、操作符组成的有意义的式子称为
地址表达式。
操作数可以是地址符号。
4).
? 在程序中使用“?”为变量预留空间而不
赋初值。例如 SUM 5). DB ?
<n> DUP(操作数,……) 若要对某些数据重复多次,可以使用这种
功能号送AH寄存器, 调用参数送所要求的位置,
然后发INT 21H系统功能调用中断。
1.单字符输入
功能号:1 返回参数:AL=输入字符的ASCII值
说明:等待从标准输入设备(通常为
键盘)输入一个字符,把接收到的字符的 ASCII值送给AL,并显示到显示器的当前
光标位置。
例. 输入一个字符到CHAR变量中。 CHAR DB ? MOV AH,1 INT 21H MOV CHAR,AL