第10节汇编程序常用伪指令简介PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
➢
DEC CL
; CL—1
➢
MOV AL,NUM1 ;数据送AL
➢ K:
ADD AL, NUM1 ; AL+ NUM1送AL
➢
ADC AH,00H ;进位送AH
➢
LOOP K
; K循环,次数由CX决定
➢
MOV PRODUCT ,AX;结果送AX
➢
RET
;调用返回
➢ MYPROC ENDP
;过程结束
➢ MYCODE ENDS
第3章
3.10.1汇编语言的格式
➢ 例 3.10.1:用重复加法的方法实现乘法运算的子程序
➢ STACK SEGMENT PARA STACK ;堆栈段开始
➢
DB 64 DUP(?)
;堆栈段空间为100个字节
➢ STACK ENDS
;堆栈段结束
➢ MYDATA SEGMENT PARA ‘STACK’ ;数据段开始
➢ NUM1 DB 2AH
;数据段放的数据
➢ NUM2 DB 78H
➢ PRODUPCT DW ?
;数据缓冲区
➢ MYDATA ENDS
;数据段结束
➢ MYCODE SEGMENT
;代码段开始
➢
、
ASSUME CS:MYCODE DS:MYDATA ;指明代码段、数据段
➢
SS:STACK
;堆栈段段名
;空操作指令,没有操作数,带有标号 LOOP DELAY ;循环指令,标号DELAY说明转移位置
BUFFER DB 1,2,3,4,5,6,7;数据定义伪指令,在主存中
➢ 0005H B8 9D14 MOV AX, ESEG ;附加段段地址送AX
➢ 0008H 8EC0 MOV ES, AX ;附加段段地址装入ES
➢ 000AH 2F02C1
CLD
; 选择地址增方向
第3章
➢ 000BH ➢ 000EH ➢ 0011H ➢ 0014H ➢ 0015H ➢ 0018H ➢ 0019H ➢ 001BH ➢ 001DH
;代码段结束
➢
END MYPROC ;程序结束
2021
第3章
例4.2假设LISTA与LISTB为两个字类型数组,将他们 各对应相加,其和放在LISTB数组中,程序设计如下:
STACK SEGMENT
;堆栈段开始
➢
DW 32H DUP(?)
;堆栈段空间为40个字
➢ STACK ENDS
;堆栈段结束
➢ DSEG SEGMENT
➢ 硬指令——使CPU产生动作、并在程序执 行时才处理的语句,就是前面第3章学习 的处理器指令,汇编时会生成目标代码
➢ 伪指令(Directive)——不产生CPU动 作、在程序执行前由汇编程序处理的说明 性语句,例如,数据说明、变量定义等等
➢ 伪指令与具体的处理器类型无关,但与汇 编程序的版本有关,即;伪指令语句只为 汇编程序提供汇编时所需的信息,而本身 不会生成目标代码
➢ ➢ ➢
BE 0000 MOV SI, OFFSET LISTA ; 指向源块的首地址
BF 0000 MOV DI, OFFSET LISTB ; 指向目的块的首地址
B9 6400 MOV CX,100
;循环次数
AD LOP1: LODSW
; LISTA元素送AX
260305
ADD AX,ES:[DI] ;将LISTB元素加到AX
(3)所有过程(用RROC语句定义)必须用过程结束语句( ENDP)结束。整个源程序也必须用结束语句(END)来结束 。
汇编程序有三种基本语句构成:(硬)指令语句,(说明) 伪指令语句,(说明)宏指令语句。
(4)程序开始必须申明(装入)各段寄存器的值,即各段地址 2021
第3章 一:(硬)指令语句和伪指令语句
;数据段开始
➢
LISTA DW 64H DUP(1234H) ;100字的源缓冲区
➢ DSEG ENDS
;数据段结束
➢ ESEG SEGMENT
;附加段开始
➢
LISTB DW 100 DUP (432H1) ; 100字的目的缓冲区
➢ ESEG ENDS
;附加段结束
➢ CSEG SEGMENT
;代码段开始
(数据段),它在存储器中放了被乘数,乘数的数据,第三段
称为CODE (代码段),其中包括了许多以符号表示的指令用 于实现乘法运算。程序中出现了SEGMEN 、ASSUME伪指令 。
(2) ASSUME语句可使汇编程序知道CS、DS、SS、ES指向 那个段地址,它在汇编时起作用,在运行时CPU不知道除CS外 的其他段地址,所以必须在程序中用指令进行赋值。
➢ MYPROCபைடு நூலகம்PROC FAR
;定义过程
PUSH DS
;DS进栈
➢
SUB AX,AX
;AX清零
➢
PUSH AX
; AX进栈
➢
MOV AX,SEG MYDATA
;段地址送AX
➢
2021 MOV DS,AX
; AX送DS
第3章
➢
SUB AX,AX
; AX清零
➢
MOV CX,AX
; CX清零
➢
MOV CL,NUM2 ;数据送CL
2021
第3章
⑴ 执行性语句——由硬指令构成的语句,它通常对应 一条机器指令,出现在程序的代码段中:
标号: 硬指令助记符 目的操作数, 源操作数;注释 前面章节已讲过
⑵ 说明性语句——由伪指令构成的语句,它通 常指示汇编程序如何汇编源程序:
名字 伪指令助记符 参数,参数,… ;注释
MOV CX,0 ;传送指令,具有2个操作数 DELAY: NOP
AB
STOSW
;两数之和存入LISTB
E2F9
LOOP LOP1
;循环至CX=0
B4 4C
MOV AH,4CH
;功能调用号4CH送入AH
CD 21
INT 21H
;程序结束后返回DOS
MAIN ENDP
;过程结束
CSEG ENDS
;代码段结束
END MAIN
;程序结束
2021
第3章
举例程序得出结论
(1) 源程序一般由n个段构成,理论上讲可以有很多,但实际 上8086/8088规定不超出16段。每个段都以 SEGMEN语句开 始,以ENDS语句结束。程序中第一段称为STACK(堆栈段) ,它用来在存储器的某个地方建立一个栈区;第二段称为DATA
➢
ASSUME CS:CSEG DS:DSEG;指明代码段、数据段段名
➢
ASSUME SS:STACK ES:ESEG ;堆栈段、附加段段名
➢
MAIN PROC
;定义过程
0000H B8 9014 MOV AX,DSEG ;数据段段地址送AX
➢ 0003H 8ED8 MOV DS, AX ;数据段段地址装入DS