1 / 14

一、设计一个完整的汇编语言源程序,实现 Z=X+Y 。

一、设计一个完整的汇编语言源程序,实现 Z=X+Y 。. 1. 实现加法运算的程序段如下:. ;取被加数. MOV AL , X. MOV BL , Y. ;取加数. ;完成 X+Y 运算. ADD AL , BL. ;把结果保存在目的单元中. MOV Z , AL. 2. 数据段定义. 段定义语句 SEGMENT/ENDS. 功能:指出段名,表示段的开始和结束. 格式:段名 SEGMENT ┆ 段名 ENDS. DATA SEGMENT.

eden
Télécharger la présentation

一、设计一个完整的汇编语言源程序,实现 Z=X+Y 。

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. 一、设计一个完整的汇编语言源程序,实现Z=X+Y。一、设计一个完整的汇编语言源程序,实现Z=X+Y。 1. 实现加法运算的程序段如下: ;取被加数 MOV AL,X MOV BL,Y ;取加数 ;完成X+Y运算 ADD AL,BL ;把结果保存在目的单元中 MOV Z,AL

  2. 2. 数据段定义 段定义语句 SEGMENT/ENDS 功能:指出段名,表示段的开始和结束 格式:段名 SEGMENT ┆ 段名 ENDS DATA SEGMENT ;数据段起始 X DB 32H ;数据段内容 Y DB 25H Z DB 1 DUP(?) DATA ENDS ;数据段结束

  3. 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 段寄存器: 段名, 段寄存器: 段名, …… 功能: 说明当前段所在位置。

  4. 二、完整的汇编语言源程序,实现Z=X+Y。 结束 定义代码段 定义数据段 定义堆栈段 说明各段所在位置 对DS和ES进行初始化 返回DOS状态 数据定义 核心程序段 指定程序存放的起始地址偏移量 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 MOV ES, AX MOV AL, X MOV BL, Y ADD AL, BL MOV Z, AL MOV AH, 4CH INT 21H CODE ENDS END START

  5. 返回DOS状态 结束 定义数据段 说明各段所在位置 对DS和ES进行初始化 核心程序段 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 ··· ··· MOV AH, 4CH INT 21H CODE ENDS END START 三、程序正常结束的方式 1。主程序方式

  6. 返回DOS状态 核心程序段 压返回DOS地址 对DS和ES进行初始化 说明各段所在位置 定义数据段 结束 DATA SEGMENT ··· ··· DATA ENDS CODE SEGMENT ASSUME CS:CODE, SS:STACKA, DS:DATA, ES:DATA MAIN PROC FAR START:PUSH DS SUB AX,AX PUSH AX MOV AX, DATA MOV DS, AX MOV ES, AX ··· ··· RET MAIN ENDP CODE ENDS END START 2。定义为过程形式

  7. 四、其他伪指令说明 1. 起始地址说明伪指令 ORG 格式:ORG 偏移地址 功能:说明该伪指令后的程序或数据所在位置的起始偏移地址 2. 数据定义伪指令 DB、DW、DD、DF、DQ、DT、DUP 作用: 为数据项分配一个或多个字节的存储空间,且可给它 们赋初值。 ⑴ 字节变量定义伪指令 DB 格式:[变量名] DB 表达式表 功能:定义字节变量区,变量区的数据由表达式 (逗号分隔的数据项)给出,每个数据项占一个字节。

  8. 例如: X DB 1,3,5 +3-1,9 X 0 1 内存分配 图如右所示: ⑵ 字变量定义伪指令 DW 0 3 格式与DB指令相同,定义字变量区,每个数据项占两个字节,低字节在低地址处,高字节在高地址处。 0 7 0 9 例如: Y DW 1005h, 0028h 单元地址 ∶ ∶ 内存分配图如右所示: ⑶ 双字变量定义伪指令 DD 05h Y 2010h 格式与DB指令相同,定义双字变量区 10h 2011h ⑷ 三字变量定义伪指令 DF 28h 2012h 格式与DB指令相同,定义三字变量区 00h 2013h ⑸ 四字变量定义伪指令 DQ 格式与DB指令相同,定义四字变量区 ⑹ 五字变量定义伪指令 DT 格式与DB指令相同,定义五字变量区

  9. 例如: Z DQ 1020304050607080h 例:有如下数据定义指令, 分析其存储情况。 内存分配 图如下页所示: C1 DB ‘A’, ‘B’, ‘C’ C2 DW ‘A’, ‘B’ , ‘C’ 内存分配图如下所示: Z 8 0 h 2100h 2101h 7 0 h 4 1 h 2020h C1 2021h 6 0 h 4 2 h 5 0 h 4 3 h ∶ ∶ 4 0 h C2 4 1 h ∶ ∶ 3 0 h 0 0 h 2106h 2 0 h 4 2 h 2107h 1 0 h 0 0 h 2027h 4 3 h 0 0 h 2028h

  10. 五、汇编语言程序的上机步骤 开始 用EDIT编辑修改源程序,存盘形成*.asm文件 用TASM32 汇编源程序文件,形成*.obj文件 Y 有错误吗? N 用TLINK 程序连接目标码文件, 形成可执行文件*.exe文件 Y 有错误吗? N 用TD 程序运行可执行文件*.exe N 结束 有错误吗? Y 用TD程序进行调试,找出错误原因

  11. 第一次实验内容 • 1.2:汇编语言编程与调试方法 • (1)汇编语言程序结构 • (2)汇编语言程序开发过程 • (3)MS—DOS EDIT文本编辑 • (4)TD使用方法 • 1.3.1:简单程序设计实验 • P25:例1.1 • P26:实验内容1 • P27:实验内容2 • P27:实验内容3

  12. 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

  13. 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

More Related