汇编语言程序结构PPT课件
合集下载
课件-汇编语言子程序结构.ppt
Exit : ret Decibin endp
;每次乘的
;结果在BX中
8
Binihex proc near mov ch, 4
Rotate: mov cl, 4 rol bx, cl mov dl, bl and dl, 0fh add dl, 30h cmp dl, 3ah jl print add dl, 7h
┆ 过程名 ENDP
其中PROC表示过程定义开始,ENDP表示过程定 义结束。过程名是过程入口地址的符号表示。
一般过程名同标号一样,具有三种属性,即段 属性、偏移地址属性以及类型属性〔NEAR 和 FAR)。
2024/10/8
2
1.如果调用程序和过程在同一代码段中,那么使用NEAR属 性;
例
MAIN PROC FAR … CALL SUBR1 RET
sp
di
si
cx
ax
(Sp→)bp
bp
IP CS
[bp+06h] Sum地址
[bp+08h] Count地址 [bp+0ah] Ary地址
Sp
Sp Sp Sp
Sp
14
5 多个模块之间的参数传送问题
(1) PUBLIC伪指令 格式:PUBLIC 符号 [,符号] 功能:说明其后的符号是全局符号。全局符号能被其他模
Print: mov ah, 2 int 21h dec ch jnz rotate
2024/10/8 ret Binihex endp
Crlf proc near mov ah, 2 mov dl, odh int 21h mov dl, oah int 21h ret
Crlf endp
Decihex ends
;每次乘的
;结果在BX中
8
Binihex proc near mov ch, 4
Rotate: mov cl, 4 rol bx, cl mov dl, bl and dl, 0fh add dl, 30h cmp dl, 3ah jl print add dl, 7h
┆ 过程名 ENDP
其中PROC表示过程定义开始,ENDP表示过程定 义结束。过程名是过程入口地址的符号表示。
一般过程名同标号一样,具有三种属性,即段 属性、偏移地址属性以及类型属性〔NEAR 和 FAR)。
2024/10/8
2
1.如果调用程序和过程在同一代码段中,那么使用NEAR属 性;
例
MAIN PROC FAR … CALL SUBR1 RET
sp
di
si
cx
ax
(Sp→)bp
bp
IP CS
[bp+06h] Sum地址
[bp+08h] Count地址 [bp+0ah] Ary地址
Sp
Sp Sp Sp
Sp
14
5 多个模块之间的参数传送问题
(1) PUBLIC伪指令 格式:PUBLIC 符号 [,符号] 功能:说明其后的符号是全局符号。全局符号能被其他模
Print: mov ah, 2 int 21h dec ch jnz rotate
2024/10/8 ret Binihex endp
Crlf proc near mov ah, 2 mov dl, odh int 21h mov dl, oah int 21h ret
Crlf endp
Decihex ends
汇编语言程序设计经典课件模版(PPT65张)
DA4 DB 5 DUP(0) ; 重复5个0存入DA4开始的存储单元中
2 表达式赋值语句
1)赋值语句 EQU
格式: 符号名 EQU 表达式 ;一个符号名只能定义一次
例:
COUNT EQU 100
; 常数赋给符号名COUNT
DATA EQU COUNT+2
; 表达式赋给符号名DATA
A1
运算结果 改变运算符优先级 下表或间接地址 连接结构与变量 修改变量 位图形 记录/字段位数
运算符优先级
优先级 1 2 3 4 5 6 7 8 9 10
运算符 ( ) , [ ] , < > , • , LENGTN , WIDTH , SIZE , MASK PTR , OFFEST , SEG , TYPE , THIS , CS: , DS: , ES: , SS: HIGH , LOW * , / , MOD , SHL , SHR +,- EQ , NE , LT , LE , GT , GE NOT AND OR , XOR SHORT
段名 ends ;指示段或者结构结束 功能:将一个逻辑段定义成一个整体 规定段所属的段寄存器 assume cs:段名, ds:段名, ss:段名,ES:段名 功能:定义4个逻辑段,指明段和段寄存器的 关系
3 段定义语句
定义类型是对该段起始位置的定义。参数有:
PARA,BYTE,WORD,PAGE
格式2:变量名 助记符 n DUP(操作数,操作数….)
N必须是正整数,表示括号内操作数的重复次数
例如:
DA1 DB 10H, 23H ; 变量DA1装入10H , 23H
DA2 DW ‘OK’
; 字符串‘OK’的ASCII码装入DA2开始的存 储单元中
四章汇编语言程序设计ppt课件
指令助记符:MOV,ADD,…. 指示性(伪指令)操作符:DB,DW,SEGMENT,
ENDS,ASSUME,END ,…. 保留字:SEGMENT ENDS OFFSET SIZE DB
DW DD MOV PUSH ADD SUB MUL DIV INC DEC LOOP PROC ENDP CALL RET END
类别名
CODE、DATA、STACK(同名同类别段连续存放)
第4章 汇编语言程序设计
伪操作命令之三:段定义伪指令
段寄存器说明伪指令ASSUME
ASSUME 段寄存器名:段名[段寄存器名:段名[…..]]
例:
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
MAIN:
……
CODE ENDS ENDS MAIN
;指定第一条要执行的指令标号
注:1、该伪指令用于明确用SEGMENT定义的段的类型, 使编译程序能生成目标代码程序。
2、在源程序中,该伪操作放在可执行程序的前面。 3、该指令没有给段寄存器赋予实际的初值。这项工作要通
过写指令来完成,其中代码段不需要赋值。
+、-、*、/、MOD、SHL、SHR 都可应用于数字运算。 +、- 可以用于表示存储器操作数的地址,或两个存储器
单元(同一段内)的地址偏移量之差。 例:SUM - 2
CYCLE - GO
第4章 汇编语言程序设计
运算符之二:逻辑运算符
AND、OR、XOR、NOT 按位的逻辑运算 例:IN AL,PORT_VAL
DATA2 DB 0C1H,36H,9EH,0D5H,20H;加数
DATA ENDS;数据段结束
CODE SEGMENT;定义代码段
ENDS,ASSUME,END ,…. 保留字:SEGMENT ENDS OFFSET SIZE DB
DW DD MOV PUSH ADD SUB MUL DIV INC DEC LOOP PROC ENDP CALL RET END
类别名
CODE、DATA、STACK(同名同类别段连续存放)
第4章 汇编语言程序设计
伪操作命令之三:段定义伪指令
段寄存器说明伪指令ASSUME
ASSUME 段寄存器名:段名[段寄存器名:段名[…..]]
例:
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
MAIN:
……
CODE ENDS ENDS MAIN
;指定第一条要执行的指令标号
注:1、该伪指令用于明确用SEGMENT定义的段的类型, 使编译程序能生成目标代码程序。
2、在源程序中,该伪操作放在可执行程序的前面。 3、该指令没有给段寄存器赋予实际的初值。这项工作要通
过写指令来完成,其中代码段不需要赋值。
+、-、*、/、MOD、SHL、SHR 都可应用于数字运算。 +、- 可以用于表示存储器操作数的地址,或两个存储器
单元(同一段内)的地址偏移量之差。 例:SUM - 2
CYCLE - GO
第4章 汇编语言程序设计
运算符之二:逻辑运算符
AND、OR、XOR、NOT 按位的逻辑运算 例:IN AL,PORT_VAL
DATA2 DB 0C1H,36H,9EH,0D5H,20H;加数
DATA ENDS;数据段结束
CODE SEGMENT;定义代码段
第5章 汇编语言基本结构程序设计PPT课件
(1)单条件转移指令
根据某个标志位的值进行转移。
① JZ/JE OPR ZF=1转移
② JNZ/JNE OPR ZF=0转移
③ JS OPR ④ JNS OPR
SF=1转移 SF=0转移
⑤ JO OPR
OF=1转移
06.11.2020
8
⑥ JNO OPR
OF=0转移
⑦ JP/JPE OPR PF=1转移
3
5.3 分支程序设计 5.3.1 转移指令
分支程序就是根据条件的不同完成不同功能的程序, 编写分支程序要用到转移指令(也叫分支指令)。转移 指令分无条件转移指令和条件转移指令。
06.11.2020
4
1.无条件转移指令
无条件转移指令的功能是无条件转移到指定的地址 去执行从该地址开始的指令。
转移分为2类:段内转移和段间转移,段内转移是 指在同一代码段范围内的转移,只改变IP寄存器的内容, CS的值保持不变;段间转移是指在不同代码段之间的转移 ,既要改变IP的值,也要改变CS的值。
(5)段间间接转移 格式:JMP DWORD PTR OPR 功能:IP←(EA), CS←(EA+2)
OPR是一个双字存储器,低字存放转移目标的偏移地址 ,高字存放转移目标的段地址。
06.11.2020
7
2.条件转移指令
根据条件满足与否决定是否转移,满足条件转到目标处执
行,不满足条件顺序执行下一条指令,从而形成分支。条件 转移指令只能实现段内转移,而且转移范围是-128 ~ +127 。
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AL,AD1
第4章汇编语言程序设计ppt课件
DATA1
11
22
33 44
DATA2
11
00
22
00
44
33
DATA3
22
0
0
0
22
0
0
0
XX
66
55 44 33
28
数据定义伪指令的几点 说明
伪指令的性质决定所定义变量的类型;
定义字符串必须用DB伪指令
例:
DATA1 DB ‘ABCD’,66H
41H
‘A’
42H
‘B’
43H
‘C’
44H
‘D’
AH
DISN:T D2X1H
功能号OAH 字符串在内存中的存放地址
58
2. 定义字符缓冲区
用户自定义缓冲区格式:
N1 N2
存放字符个数:≤255
存放键入的字符 整个缓冲区
实际键入字符数 最大可键入字符数
0DH
59
输入字符串程序段
DAT1 DB 20,?,20 DUP(?)
┇
LEA DX,DAT1 MOV AH,0AH INT 21H
定义的变量为4字型(8字节)
定义的变量为10字节型
26
数据定义伪指令例
DATA1 DB 11H,22H,33H,44H DATA2 DW 11H,22H,3344H DATA3 DD 11H*2,22H,33445566H
以上变量在内存中的 存放形式
27
数据定义伪指令例_变量在内存中的
分布
DSEG SEGMENT DATA1 DB 1,2, 3 DUP(?) DATA2 DW 1234H
DSEG ENDS ESEG SEGMENT
《汇编语言》PPT课件
机
原
理 例3-3
ORG 1000H
及
DW
1234H
应 用 编
SJ_DATA: DW
56H,2000
经汇编后,从地址1000H处存贮器的内容为:
著
〔1000H〕= 12H
组
〔1001H〕= 34H
〔1002H〕= 00H
〔1003H〕= 56H
〔1004H〕= 07H
§3.1.2 汇编伪指令
湘 四、EQU 赋值伪指令 潭 字符名称 EQU 项〔数或汇编符号〕
;〔35H〕 A
MOV DPTR,#DPTRA ;0AA00H DPTR
§3.1.2 汇编伪指令
湘 七、BIT定义位地址符号伪指令 潭 字符名称 BIT 位地址
大 学
这里的"字符名称"与标号不同〔其后没有冒号〕,但
单 它是必须的,其功能是把BIT之后的"位地址"值赋给"字
片 机
符名称".
原 理
例3-6:
潭 大
[标号:] DB X1、 X2 … Xn
学
ORG 1000H
单
DB
片
SJ-DATA: DB
0AAH 25,25H
机
ZFC-DATA: DB
'MCS-51'
原
理 及 应 用 编 著
经汇编后,从地址1000H处存贮器的内容为: 〔1000H〕= AAH 〔1001H〕= 19H 〔1002H〕= 25H 〔1003H〕= 4DH
用
编 著 组
eg: MOV MOV MOV
P1,A 70H ,R2 0E0H,78H
; MOV 90H,A ; (A)
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
此例为计数循环
例: 将十进制数(number)转换为八进制数
方法:(number)/8 保留余数,除法操作循环次数事先未知,
仅当商为0时,循环结束。此例-为条件循环
n1e1 xt
(DX)= 0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 1. 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 (ROL DX,1 ) 0 0 0 0 0 0 0 1 (AND ?,1) 00000000 + 0 0 1 1 0 0 0 0 (ADD ?,30H) 00110000 2. 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1 (ROL DX,1) 0 0 0 0 0 0 0 1 (AND) 00000001 + 0 0 1 1 0 0 0 0 (ADD)
LOOP AGAIN
DEC CX
- JNZ AGAIN
9
例: 求存放在STRS存储区中的字符串长度。
设: STRS
DB MOV MOV
string$ CX,80 SI,-1
MOV
AL,$
AGAIN: INC
SI
CMP
AL,STRS[SI]
LOOPNE AGAIN
MOV
LEN,SI
循环程序设计方法
保证循环正常执行和结束的条件:
正确地初始化循环控制计数和初始条件
❖ 正确地检测循环条件
必须保证能达到循环结束条件 (例如在循环体内有修改循环
控制值的指令)
-
8
指令系统提供了专门用于循环结构的循环控制指令,更加 简便的地实现循环结构。
循环控制指令 循环控制指令的转移范围为:-128~+127字节(段内短转移)
并转换为:
30 31 30 30 30 30 31 30 30 30 31 31 30 30 30 30
先将(num)->(DX),再讨论如何分离开各二进制位并转 换为ASCII码,分析如下:
根据上述分析,将(DX)中的二进制数依次循环左移1位, 可以使得各个数位的分离(AND)和ASCII码转换(ADD)操 作完全相同,便于组织循环,并且循环次数已知(16次)。
……
00110001
16. 0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 (ROL DX,1) 0 0 0 0 0 0 0 1 (AND)
00000000 + 0 0 1 1 0 0 0 0 (ADD)
00110000
binbuf 30 31 30 30 30 30 31 30- 30 30 31 31 30 30 30 30 12返回
-
4
第二节:循环结构
初始化 循环体循环的初始状态
循环的工作部分 及修改部分
计数控制循环 条件控制循环
5
循第环一与章分支基程础序知设识计
-
6
循第环一与章分支基程础序知设识计
-
7
循环程序设计
根据条件重复执行一段指令就构成了循环程序结构 。
例:将ARRAY数组中的50个数求和,并将和存入字变量S中 。
当型循环与直到型循环:
例 统计AX中的二进制数含“1”的总个数,程序段如下:
MOV AGAIN: AND
JZ SAL JNC INC NEXT: JMP QUIT :
CX,0 AX,AX QUIT AX,1 NEXT CX AGAIN
;(AX)=0? ;是,退出循环 ;否,(AX)的最高位移入CF位 ;CF≠1时,转向NEXT再次循环 ;CF=1,计数器(CX)←(CX) +1 ;再次循环
循第环一与章分支基程础序知设识计
编制一个汇编语言程序的步骤
1)分析题意,确定算法。这一步是能否编制出高质量程序的关键,因此不应 该一拿到题目就急于写程序,而是应该仔细地分析和理解题意,找出合理 的算法及适当的数据结构。
2)根据算法画出程序框图。这一点对初学者特别重要,这样做可以减少出 错的可能性。画框图时可以从粗到细把算法逐步地具体化。
控制循环的方法可分为两类:
计数循环——用于循环次数已知的情况
条件循环——用于循环次数不确定的情况
-
10
例:将字变量num中的数按16位二进制数位分离开,逐位转换 为ASCII码,并从最高有效位开始依次逐位存入以binbuf为起 始地址的16个字节单元中。
设:(num)= 4230H 要求将 4230H= 0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 B 逐位分离开
概述
二、程序的基本结构 1、顺序结构程序 2、分支结构程序 3、循环(重复)结构程序
顺序结构 分支结构 循环(重复)结构
-
3
第一节 顺序结构程序设计
• 顺序结构程序完全按指令书写的前后顺 序执行每一条指令,是最基本、最常见 的程序结构
• 特点
顺序性、结构简单,只适应于简单问题 的处理
例1 计算
例2 移位
(1)LOOP指令
格式:LOOP 标号 操作: 如图所示 (2)等于继续循环指令
格式:LOOPZ/LOOPE 标号
否 (CX) ≠≠00且且ZZFF==10??
(CX)≠ 0?
是
执行循环体 退出循环
(3)不等于继续循环指令 格式:LOOPNZ/LOOPNE 标号
(CX) (CX) -1
在前面的求和例子中,可用一条循环指令代替两条指令:
MOV MOV MOV AGAIN : ADD ADD
AX,0
;累加求和寄存器清0
BX,OFFSET ARRAY ;数组始址送BX中
CX,50
;循环控制计数初始化
AX,[BX]
BX,2
;数组地址增2,BX指向下一个元素
DEC CX
;循环控制计数减1
JNZ AGAIN MOV S,AX
;计数不为0时继续循环 ;计数为0时循环结束,和存于S中
分析问题
序的设计是汇编语言程序设计的基
本内容。
寻找解决问题的 思路、方法、算法
在此基础上还要掌握汇编语言 程序设计的基本方法和技巧 ,包
描述算法
括递归子程序设计、COM和EXE 格式程序的结构和特点、多模块
编写程序实现算法
程序设计方法等。
设计测试数据
和预期计算结果
程序设计的解题基本步骤如下:
-
上机调试程序 2
3)根据框图编写程序。
4)上机调试程序。任何程序必须经过调试才能检查出你的设计思想是否正 确以及你的程序是否符合你的设汁思想。在调试程序的过程中应该善于利 用机器提供的调试工具(如DEBUG)来进行工作,你会发现它会给你提供 很大的帮助。
-
1
概述
一、汇编语言程序设计的基本方法
顺序、分支、循环程序和子程
例: 将十进制数(number)转换为八进制数
方法:(number)/8 保留余数,除法操作循环次数事先未知,
仅当商为0时,循环结束。此例-为条件循环
n1e1 xt
(DX)= 0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 1. 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 (ROL DX,1 ) 0 0 0 0 0 0 0 1 (AND ?,1) 00000000 + 0 0 1 1 0 0 0 0 (ADD ?,30H) 00110000 2. 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1 (ROL DX,1) 0 0 0 0 0 0 0 1 (AND) 00000001 + 0 0 1 1 0 0 0 0 (ADD)
LOOP AGAIN
DEC CX
- JNZ AGAIN
9
例: 求存放在STRS存储区中的字符串长度。
设: STRS
DB MOV MOV
string$ CX,80 SI,-1
MOV
AL,$
AGAIN: INC
SI
CMP
AL,STRS[SI]
LOOPNE AGAIN
MOV
LEN,SI
循环程序设计方法
保证循环正常执行和结束的条件:
正确地初始化循环控制计数和初始条件
❖ 正确地检测循环条件
必须保证能达到循环结束条件 (例如在循环体内有修改循环
控制值的指令)
-
8
指令系统提供了专门用于循环结构的循环控制指令,更加 简便的地实现循环结构。
循环控制指令 循环控制指令的转移范围为:-128~+127字节(段内短转移)
并转换为:
30 31 30 30 30 30 31 30 30 30 31 31 30 30 30 30
先将(num)->(DX),再讨论如何分离开各二进制位并转 换为ASCII码,分析如下:
根据上述分析,将(DX)中的二进制数依次循环左移1位, 可以使得各个数位的分离(AND)和ASCII码转换(ADD)操 作完全相同,便于组织循环,并且循环次数已知(16次)。
……
00110001
16. 0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 (ROL DX,1) 0 0 0 0 0 0 0 1 (AND)
00000000 + 0 0 1 1 0 0 0 0 (ADD)
00110000
binbuf 30 31 30 30 30 30 31 30- 30 30 31 31 30 30 30 30 12返回
-
4
第二节:循环结构
初始化 循环体循环的初始状态
循环的工作部分 及修改部分
计数控制循环 条件控制循环
5
循第环一与章分支基程础序知设识计
-
6
循第环一与章分支基程础序知设识计
-
7
循环程序设计
根据条件重复执行一段指令就构成了循环程序结构 。
例:将ARRAY数组中的50个数求和,并将和存入字变量S中 。
当型循环与直到型循环:
例 统计AX中的二进制数含“1”的总个数,程序段如下:
MOV AGAIN: AND
JZ SAL JNC INC NEXT: JMP QUIT :
CX,0 AX,AX QUIT AX,1 NEXT CX AGAIN
;(AX)=0? ;是,退出循环 ;否,(AX)的最高位移入CF位 ;CF≠1时,转向NEXT再次循环 ;CF=1,计数器(CX)←(CX) +1 ;再次循环
循第环一与章分支基程础序知设识计
编制一个汇编语言程序的步骤
1)分析题意,确定算法。这一步是能否编制出高质量程序的关键,因此不应 该一拿到题目就急于写程序,而是应该仔细地分析和理解题意,找出合理 的算法及适当的数据结构。
2)根据算法画出程序框图。这一点对初学者特别重要,这样做可以减少出 错的可能性。画框图时可以从粗到细把算法逐步地具体化。
控制循环的方法可分为两类:
计数循环——用于循环次数已知的情况
条件循环——用于循环次数不确定的情况
-
10
例:将字变量num中的数按16位二进制数位分离开,逐位转换 为ASCII码,并从最高有效位开始依次逐位存入以binbuf为起 始地址的16个字节单元中。
设:(num)= 4230H 要求将 4230H= 0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 B 逐位分离开
概述
二、程序的基本结构 1、顺序结构程序 2、分支结构程序 3、循环(重复)结构程序
顺序结构 分支结构 循环(重复)结构
-
3
第一节 顺序结构程序设计
• 顺序结构程序完全按指令书写的前后顺 序执行每一条指令,是最基本、最常见 的程序结构
• 特点
顺序性、结构简单,只适应于简单问题 的处理
例1 计算
例2 移位
(1)LOOP指令
格式:LOOP 标号 操作: 如图所示 (2)等于继续循环指令
格式:LOOPZ/LOOPE 标号
否 (CX) ≠≠00且且ZZFF==10??
(CX)≠ 0?
是
执行循环体 退出循环
(3)不等于继续循环指令 格式:LOOPNZ/LOOPNE 标号
(CX) (CX) -1
在前面的求和例子中,可用一条循环指令代替两条指令:
MOV MOV MOV AGAIN : ADD ADD
AX,0
;累加求和寄存器清0
BX,OFFSET ARRAY ;数组始址送BX中
CX,50
;循环控制计数初始化
AX,[BX]
BX,2
;数组地址增2,BX指向下一个元素
DEC CX
;循环控制计数减1
JNZ AGAIN MOV S,AX
;计数不为0时继续循环 ;计数为0时循环结束,和存于S中
分析问题
序的设计是汇编语言程序设计的基
本内容。
寻找解决问题的 思路、方法、算法
在此基础上还要掌握汇编语言 程序设计的基本方法和技巧 ,包
描述算法
括递归子程序设计、COM和EXE 格式程序的结构和特点、多模块
编写程序实现算法
程序设计方法等。
设计测试数据
和预期计算结果
程序设计的解题基本步骤如下:
-
上机调试程序 2
3)根据框图编写程序。
4)上机调试程序。任何程序必须经过调试才能检查出你的设计思想是否正 确以及你的程序是否符合你的设汁思想。在调试程序的过程中应该善于利 用机器提供的调试工具(如DEBUG)来进行工作,你会发现它会给你提供 很大的帮助。
-
1
概述
一、汇编语言程序设计的基本方法
顺序、分支、循环程序和子程