设计一个完整的汇编语言源程序.
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单元地址
2010h 2011h 2012h 2013h
例:有如下数据定义指令, 分析其存储情况。
C1 DB ‘A’, ‘B’, ‘C’ C2 DW ‘A’, ‘B’ , ‘C’ 内存分配图如下所示:
C1 4 1 h 42h 43h
C2 4 1 h 00h 42h 00h 43h 00h
2020h 2021h
MAIN
PROC FAR PUSH DS SUB AX,AX PUSH AX
压返回DOS地址
MOV AX, DATA MOV DS, AX MOV ES, AX
对DS和ES进行初始化
··· ···
核心程序段
RET
MAIN ENDP
CODE ENDS END START
返回DOS状态 结束
说明各段所在位置
p28实验(2)
data segment x dd 02a8b7654h y dw 5abch z dw ? f dw ? data ends stacka segment para stack 'stack'
db 100 dup(?) stacka ends code segment
assume ds:data,cs:code,ss:stacka,es:data start: mov ax,data
三、程序正常结束的方式
1。主程序方式
DATA SEGMENT
··· ···
DATA ENDS
定义数据段
CODE SEGMENT
ASSUME CS:CODE, SS:STACKA, DS:DATA, ES:DATA
START:
MOV AX, DATA MOV DS, AX MOV ES, AX
对DS和ES进行初始化
··· ···
核心程序段
MOV AH, 4CH INT 21H
CODE ENDS END START
返回DOS状态 结束
说明各段所在位置
2。定义为过程形式
DATA SEGMENT
定义数据段
··· ···
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, SS:STACKA, DS:DATA, ES:DATA
09
内存分配图如右所示:
⑶ 双字变量定义伪指令 DD 格式与DB指令相同,定义双字变量区
⑷ 三字变量定义伪指令 DF 格式与DB指令相同,定义三字变量区
⑸ 四字变量定义伪指令 DQ
∶ ∶
Y
05h
10h
28h
00h
格式与DB指令相同,定义四字变量区
⑹ 五字变量定义伪指令 DT
格式与DB指令相同,定义五字变量区
一、设计一个完整的汇编语言源程序,实现Z=X+Y。
1. 实现加法运算的程序段如下:
MOV AL,X MOV BL,Y ADD AL,BL MOV Z,AL
;取被加数 ;取加数 ;完成X+Y运算 ;把结果保存在目的单元中
2. 数据段定义
段定义语句 SEGMENT/ENDS 功能:指出段名,表示段的开始和结束
格式:段名 SEGMENT ┆
段名 ENDS
DATA SEGMENT X DB 32H Y DB 25H Z DB 1 DUP(?)
;数据段起始 ;数据段内容
DFra Baidu bibliotekTA ENDS
;数据段结束
3. 堆栈段定义
STACKA SEGMENT STACK DB 100 DUP(?)
STACKA ENDS
4. 代码段定义 CODE SEGMENT
mov ds,ax mov es,ax
mov ax,word ptr x mov dx,word ptr x+2 div y mov z,ax mov f,dx
mov ah,4ch int 21h code ends end start
ASSUME CS:CODE, SS:STACKA, DS:DATA, ES:DATA ┇
CODE ENDS 段寄存器说明语句 ASSUME 格式: ASSUME 段寄存器: 段名, 段寄存器: 段名, …… 功能: 说明当前段所在位置。
二、完整的汇编语言源程序,实现Z=X+Y。
DATA SEGMENT
用TASM32 汇编源程序文件,形成*.obj文件
Y 有错误吗?
N 用TLINK 程序连接目标码文件, 形成可执行文件*.exe文件
Y 有错误吗? N
用TD 程序运行可执行文件*.exe
N 有错误吗?
结束
Y 用TD程序进行调试,找出错误原因
第一次实验内容
1.2:汇编语言编程与调试方法 (1)汇编语言程序结构 (2)汇编语言程序开发过程 (3)MS—DOS EDIT文本编辑 (4)TD使用方法 1.3.1:简单程序设计实验 P25:例1.1 P26:实验内容1 P27:实验内容2 P27:实验内容3
定义数据段
ORG 2100H
指定程序存放的起始地址偏移量
X DB 32H Y DB 25H Z DB 1 DUP(?)
数据定义
DATA ENDS
STACKA SEGMENT DB 100 DUP(?)
STACKA ENDS
CODE SEGMENT
定义堆栈段 定义代码段
ASSUME CS:CODE, SS:STACKA, DS:DATA, ES:DATA
START: MOV AX, DATA
MOV DS, AX
对DS和ES进行初始化
MOV ES, AX
MOV AL, X MOV BL, Y ADD AL, BL
核心程序段
MOV Z, AL MOV AH, 4CH INT 21H
返回DOS状态
CODE ENDS END START
结束
说明各段所在位置
功能:定义字节变量区,变量区的数据由表达式 (逗号分隔的数据项)给出,每个数据项占一个字节。
例如: X DB 1,3,5 +3-1,9 内存分配 图如右所示:
X 01
⑵ 字变量定义伪指令 DW
03
格式与DB指令相同,定义字变量区,每个数据项占
07
两个字节,低字节在低地址处,高字节在高地址处。
例如: Y DW 1005h, 0028h
∶ ∶
2027h 2028h
例如: Z DQ 1020304050607080h 内存分配 图如下页所示:
Z 80h 70h 60h 50h 40h 30h 20h 10h
2100h 2101h
∶ ∶
2106h 2107h
五、汇编语言程序的上机步骤
开始
用EDIT编辑修改源程序,存盘形成*.asm文件
四、其他伪指令说明
1. 起始地址说明伪指令 ORG 格式:ORG 偏移地址 功能:说明该伪指令后的程序或数据所在位置的起始偏移地址
2. 数据定义伪指令 DB、DW、DD、DF、DQ、DT、DUP
作用: 为数据项分配一个或多个字节的存储空间,且可给它 们赋初值。
⑴ 字节变量定义伪指令 DB 格式:[变量名] DB 表达式表