当前位置:
文档之家› 一、设计一个完整的汇编语言源程序,实现Z=XY.
一、设计一个完整的汇编语言源程序,实现Z=XY.
一、设计一个完整的汇编语言源程序,实现 Z=X+Y。
1. 实现加法运算的程序段如下: MOV MOV ADD AL,X BL,Y AL,BL ;取被加数 ;取加数 ;完成X+Y运算
MOV Z,AL
;把结果保存在目的单元中
2. 数据段定义 段定义语句 SEGMENT/ENDS
功能:指出段名,表示段的开始和结束 格式:段名 SEGMENT ┆ 段名 ENDS DATA SEGMENT ;数据段起始
p27实验(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 mov ds,ax mov es,ax
2100h 2101h
C2
41h
00h
42h 00h
∶ ∶
40h 30h 20h 10h
∶ ∶
2106h
2107h
43h
00h
2027h 2028h
五、汇编语言程序的上机步骤
开始 用EDIT编辑修改源程序,存盘形成*.asm文件 用TASM32 汇编源程序文件,形成*.obj文件
Y
有错误吗? N 用TLINK 程序连接目标码文件, 形成可执行文件*.exe文件 有错误吗? N 用TD 程序运行可执行文件*.exe 结束 有错误吗? Y 用TD程序进行调试,找出错误原因 N
对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 MAIN PROC FAR PUSH DS 压返回DOS地址 SUB AX,AX PUSH AX MOV AX, DATA MOV DS, AX 对DS和ES进行初始化 MOV ES, AX
X DB 32H
Y DB 25H
Z DB 1 DUP(?) DATA ENDS
;数据段内容
;数据段结束
3. 堆栈段定义 STACKA SEGMENT STACK DB 100 DUP(?)
STACKA ENDS
4. 代码段定义 CODE SEGMENT ASSUME CS:CODE, SS:STACKA, DS:DATA, ES:DATA ┇ CODE ENDS 段寄存器说明语句 ASSUME 格式: ASSUME 段寄存器: 段名, 段寄存器: 段名, ……
内存分配图如右所示: ⑶ 双字变量定义伪指令 DD
格式与DB指令相同,定义双字变量区 ⑷ 三字变量定义伪指令 DF 格式与DB指令相同,定义三字变量区 ⑸ 四字变量定义伪指令 DQ 格式与DB指令相同,定义四字变量区 ⑹ 五字变量定义伪指令 DT 格式与DB指令相同,定义五字变量区
2010h 2011h 2012h 2013h
Y
第一次实验内容
1.2:汇编语言编程与调试方法 (1)汇编语言程序结构 (2)汇编语言程序开发过程 (3)MS—DOS EDIT文本编辑 (4)TD使用方法 1.3.1:简单程序设计实验 P25:例1.1 P26:实验内容1 P27:实验内容2 P27:实验内容3
例如: X DB 1,3,5 +3-1,9 内存分配 图如右所示: ⑵ 字变量定义伪指令 DW 格式与DB指令相同,定义字变量区,每个数据项占 两个字节,低字节在低地址处,高字节在高地址处。 例如: Y DW 1005h, 0028h
X
01 03 07
09
∶ ∶ Y 05h 10h 28h 单元地址
说明各段所在位置
· · · · · ·
RET
核心程序段 返回DOS状态 结束
MAIN ENDP
CODE ENDS END START
四、其他伪指令说明 1. 起始地址说明伪指令 ORG 格式:ORG 偏移地址 功能:说明该伪指令后的程序或数据所在位置的起始偏移地址 2. 数据定义伪指令 DB、DW、DD、DF、DQ、DT、DUP 作用: 为数据项分配一个或多个字节的存储空间,且可给它 们赋初值。 ⑴ 字节变量定义伪指令 DB 格式:[变量名] DB 表达式表 功能:定义字节变量区,变量区的数据由表达式 (逗号分隔的数据项)给出,每个数据项占一个字节。
说明各段所在位置
三、程序正常结束的方式 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
功能: 说明当前段所在位置。
二、完整的汇编语言源程序,实现Z=X+Y。
DATA SEGMENT
定义数据段
指定程序存放的起始地址偏移量 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 返回DOS状态 INT 21H CODE ENDS 结束 END START
00h
例:有如下数据定义指令, 分析其存储情况。 C1 DB ‘A’, ‘B’, ‘C’ C2 DW ‘A’, ‘B’ , ‘C’ 内存分配图如下所示:
C1 41h 42h 43h 2020h 2021h
例如:
Z DQ 1020304050607080h
内存分配 图如下页所示:
Z
80h 70h 60h 50h