汇编语言 第五章-XD
汇编语言(王爽)学习记录_第五章
汇编语⾔(王爽)学习记录_第五章第五章 [bx]和loop指令1. [bx]和内存单元的描述在debug中mov ax,[0]表⽰将ds:0中的字型数据送⼊ax寄存器,⽽在编译器中此命令表⽰将0数据送⼊ax,则需改为mov ax,[bx]。
间直接是编译器将内存单元送⼊ax。
完整描述⼀个内存单元:1.内存单元的地址,2.内存单元的长度(类似al字节型,ax字型)2.looploop循环的意思3.我们定义的描述性的符号:“()”⽤“( )”表⽰⼀个寄存器或⼀个内存单元的内容,(al)、(20000H)、((ds)*16+(bx))⽐如add ax,2 描述为:(ax) = (ax)+2(X)可表⽰两种数据类型:字,字节。
取决于寄存器或具体的运算⽐如(al)表⽰字节型数据(ax)表⽰字型数据。
4.约定符号idata表⽰常量例如mov ax,[idata] 可表⽰mov ax,[1]、mov ax,[5]。
mov ax,idata可表⽰mov ax,1、 mov ax,3。
等等5.1 [bx]mov ax,[bx],可以看成是:mov bx,idata mov ax,[bx]问题5.1需要注意的是数据类型是字节型还是字型,其他就跟着题⽬看就是了。
5.2 loop指令loop指令与cx通⽤寄存器有关,执⾏loop时要进⾏两步操作:1.(cx) = (cx)-1 、2.判断(cx)不为0则执⾏标号处程序。
例:求2的12次⽅assume cs:codecode segment mov ax,2 mov cx,11s: add ax,ax loop s mov ax,4c00h int 21hcode endsend其中s是标号,当cx不为0时转⾄s处程序。
问题5.2 ⽤加法计算123*236assume cs:codecode segment mov ax,0s: add ax,123 loop s mov ax,4c00h int 21hcode endsend问题5.3 上⾯程序循环236次可以改进程序为循环123次assume cs:codecode segment mov ax,0 mov cx,123s: add ax,256 loop s mov ax,4c00h int 21hcode endsend5.3 在debug中跟踪⽤loop指令实现的循环程序问题:计算ffff:0006单元中的数乘以3结果存储在dx中 (1)考虑dx存储范围:ffff;0006是字节型数据0~255,乘3不会超过65535。
汇编语言各种指令的解释与用法
汇编语言程序设计(第二版)第五章PPT课件
MACRO retnum mov al,retnum mov ah,4ch int 21h ENDM
;;带有形参retnum ;;宏定义中使用参数
宏调用
宏名 [实参表]
start: mainbegin dispmsg string mainend 0 end start
;宏调用,建立DS内容 ;宏调用,显示字符串 ;宏调用,返回DOS
过程名 ENDP
➢要 调 用 带➢参过数程声过明程伪定指义令:的用过于程事,先声不明应过采程用的结构 CALL指令过,程因名为比较PR烦O琐TO 调用距离 语言类型, 参数:类型 ➢应该采用过程调用伪指令INVOKE ➢使 用 INV➢O过K程E调伪用伪指指令令的 前 提 是 需 要 用 PROTO伪指令对过程IN进VO行K声E 明过程名,参数,...
mov al,_a
imul _c
mov cx,4
imul cx
例5.1-1/2
;bx中为b2 ;ax中为4ac
例5.1-2/2
.if sword ptr bx >= ax ;比较二者大小 mov tag,1
;第一分支体:条件满足,tag←1 .else
mov tag,0 ;第二分支体:条件不满足,tag←0 .endif .exit 0
mov bx,ax mov ax,0 .ELSE * jmp @C0003 *@C0001: dec ax .ENDIF *@C0003:
.data
_a
sbyte ?
_b
sbyte ?
_c
sbyte ?
tag byte ?
.code
.startup
mov al,_b
imul al
汇编语言(王爽)第五章
汇编语⾔(王爽)第五章
第五章 [BX]和loop指令
*Loop指令
格式:loop 标号
等同步骤:(1)(cx)=(cx)-1;(2)若(cx)!=0,跳转到标号位置继续执⾏。
*Debug的相关命令及说明
g命令:g 偏移地址;使得执⾏到cs:偏移地址处停⽌;
p命令:使Debug程序⾃动重复执⾏代码中的循环指令,直到(cx)=0为⽌。
⽤Debug中直接写⼊指令,[idata]可以表⽰((段地址)*16+idata)处的值;⽽如果在汇编源代码中[idata]会被编译器masm处理为idata这个数值。
所以在汇编源代码中当使⽤⽴即数来表⽰偏移地址时,须加前缀以显式表明,⽐如:ds:[idata]。
*⽰例:计算ffff:0~ffff:b内存单元中数据的和,结果存储在dx中。
;1.每个内存单元⾥的数值是单字节类型,⽽dx是双字节寄存器
;2.总计12个内存单元的数据和最⼤为255*12<65535,不会产⽣溢出
assume cs:code
code segment
mov ax,0ffffH
mov ds,ax
mov bx,0;存储⽬标位置偏移地址
mov dx,0;初始化结果
mov ah,0;设置中转数的⾼位
mov cx,12
s:
mov al,[bx]
add dx,ax
inc bx
loop s
mov ax,4c00H
int 21H
code ends
end
*⼀段安全的空间:汇编学习过程中可以使⽤00200h~002ffh这段空间,总计256个字节。
汇编第五章
;ASCII码送存储器 ;形成BCD码低位 ;形成低位ASCII码 ;低位ASCII码送存储器
•第5章 程序设计方法
5.3 分支程序设计
5.3.1 单分支结构程序设计(用条件转移指令实 现程序分支) 5.3.2 多分支结构
•第5章 程序设计方法
5.3.1单分支结构程序设计
在这种分支结构的程序中,又分为两种情况,情况 之一是:一个分支完成一定的工作,而另一个分支什 么也不做。其具体程序流程如下图所示。情况之二是: 两个分支分别完成不同的操作。在此结构中要注意的 是,第一个分支完成后,一定要转到整个分支结构的 结束处。此结构的程序流程图如下图所示。
STACK1 SEGMENT PARA STACK DW 50H DUP(0); 设置堆栈段 STACK1 ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA,SS:STACK1,DS:EXTRA START:: MOV AX,DATA MOV DS,AX . (指令序列) COSEG ENDS END START
START:MOV MOV MOV AX,DATA DS,AX AL,BBUF ;AL←(BBUF)
MOV
MOV ADD
BL,AL
CL,4
;BL←(AL)
;CL←移位次数 ;BCD码高位移入低位,高位补0
SHR BL,CL
BL,30H ;形成ASCII码
•第5章 程序设计方法
MOV ABUF,BL AND AL,0FH ADD AL,30H MOV ABUF+1,AL MOV AH,4CH INT 21H CODE ENDS END START
•第5章 程序设计方法
MOV AL,DATA1+1 ;大数送AL CUNCHU:MOV MAX,AL ;存放大数 MOV AH,4CH ;结束程序返回DOS INT 21H CODE ENDS END START 例5.3数据块传送程序。程序要求把内存中源数据 块的内容传送到目的数据块中。此程序编制时要 考虑源数据块、目的数据块在存贮器中可能的三 种情况,对于不同的情况要进行不同的处理。源 数据块、目的数据块的存储情况如下图
汇编语言程序设计 第五章 课件
(3)串搜索指令 SCAS
LEA DX,ASS MOV AH,10 INT 21H LEA DI,ASS+2 ;输入串首址→DI MOV CL,ASS+1 ;输入串长度→CX MOVZX CX,CL MOV AL,′A′ ;计数器清零 MOV BX,0 P: REPNE SCASB ;查找字符‛A” JE A ;查到字符‛A”转A处执行 ;全部查完转结束 JMP OUT1 ;所有判断完否 A: CMP CX,0 JE OUT1 ;全部查完转结束 CMP BYTE PTR [DI], ‘M’ ;判断‛A”后的字符为‛M”否 JNE B ;不是转B处执行 INC BX ;是‛AM”计数器加1 B: JMP P ;未完转P继续判断 OUT1:MOV AH,4CH ;返回操作系统 INT 21H CODE ENDS END START
(1)串操作指令MOVS、CMPS、SCAS的 使用格式及功能; (2)简单宏指令的定义与调用方式; (3)模块程序设计的方法。
第五章
程序设计的其它方法与技术 三、本章学习的难点:
(1)MOVS与MOV、CMPS与CMP功能上
的差别及串操作指令的正确使用方法; (2)宏指令的定义与调用方式; (3)模块之间的组合、定位及通信方式; (4)模块化程序设计技术。
(5)存储字节/字/双字指令 STOS
●格式: ●功能:
STOS
OPD 或
STOSB 往字节串中存数 STOSW 往字串中存数 STOSD 往双字串中存数
⑴ 字节操作:(AL)→ ES:[DI]/[EDI] 字操作: (AX)→ ES:[DI]/[EDI] 双字操作:(EAX)→ES:[DI]/[EDI] 即将AL(或AX、EAX)中的数据送入DI/EDI所指的目的串中的字节(或 字、双字)存储单元中。修改指针DI/EDI,使之指向串中的下一个元素。 ⑵ 修改串指针,使之指向下一元素,修改方式为: i.当DF=0时,(SI)/(ESI)增量1(字节操作)或2(字操作) 或 4(双字操作)。 ii.当DF=1时,(SI)/(ESI)减量1(字节操作)或2(字操作) 或 4(双字操作)。 说明:该指令执行后,并不影响标志位,因而它一般只带REP重复前缀, 用来将一片连续的存储字节(或字)单元臵相同的值。
王爽《汇编语言》 第5章 [BX]和LOOP指令
(21006H)=BEH
CS:CODE : SEGMENT 循环控制指令LOOP 二、循环控制指令 MOV AX,2 , 作计数器控制程序的循环。 用CX作计数器控制程序的循环。 作计数器控制程序的循环 MOV CX,11 , 格式: 格式:LOOP 标号 ;CX≠0循环 循环 S: ADD AX,AX : , 功能: )-1; 功能:当CX≠0时,( )=(CX)- ;转移到标号处 时,(CX) ( )- LOOP S 循环执行。 利用 循环执行。 利用LOOP指令编程计算 12 指令编程计算2 指令编程计算 MOV AX,4C00H , INT 21H 2:编程,用加法计算123×236,结果存在AX中 例2:编程,用加法计算123×236,结果存在AX中。 CODE ENDS END ASSUME CODE CX和LOOP指令配合实现循环功能的三个要点: 和 指令配合实现循环功能的三个要点: 指令配合实现循环功能的三个要点 1、在CX中存放循环次数 、 中存放循环次数 2、LOOP指令中的标号所标识地址要在前面 、 指令中的标号所标识地址要在前面 3、要循环执行的程序段写在标号和LOOP指令之间。 、要循环执行的程序段写在标号和 指令之间。 指令之间
七、一段安全的空间
汇编语言程序直接面向机器, 汇编语言程序直接面向机器,如果我们要向 内存空间写入数据时, 内存空间写入数据时,要保证所写入的内存中没 有重要的数据,否则会影响系统的正常运行, 有重要的数据,否则会影响系统的正常运行,在 一般的PC机中都不使用 机中都不使用0: 一般的 机中都不使用 :200—0:300这段内存 : 这段内存 空间,所以我们可以放心使用这段安全的空间。 空间,所以我们可以放心使用这段安全的空间。
一、[BX]
汇编语言课程课件-第五章
MOV reg/mem,imm
例题5-1
MOV reg/me;m/立se即g,数re送g寄存器例或题主5-存2
MOV;r寄eg存/s器eg送,m(em段)寄存器例或题主5存-3
MOV reg/mem;,s主eg存送(段)例寄题存5器-5 ;段寄存器送寄存器或主存
交换指令XCHG(exchange)
; 字节数组访问 mov al,arrayB mov al,[arrayB+1] mov al,[arrayB+2] ; 字数组访问 mov ax,arrayW mov ax,[arrayW+2]
; AL = 10h ; AL = 20h ; AL = 30h
; AX = 100h ; AX = 200h
在保护模式下,LDS指令 将主存中mem指定的前面 4个字节送至32位寄存器, 并 将 mem 的 下 一 字 送 DS
寄存器。
实模式下,LES指令将主 存 中 mem 指 定 的 字 送 至 r16,并将mem的下一字 送DS寄存器。
在保护模式下,LES指令 将主存中mem指定的前面 4个字节送至32位寄存器, 并 将 mem 的 下 一 字 送 DS
5.2.1 加法指令
执行双字,字或字节的加法运算。
ADD ADC INC
加法指令ADD
ADD指令将源与目的操作数相加,结 果送到目的操作数 ADD指令按状态标志的定义相应设置
例题5-12
ADD reg,imm/reg/mem ;reg←reg+imm/reg/mem
ADD mem,imm/reg ;mem←mem+imm/reg
把两个地方的数据进行互换
XCHG reg,reg/mem ;reg reg/mem
第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
精品PPT课件--第5章汇编语言程序设计
名字 伪指令 操作数1,操作数2,…,操作数n ;注释
注:各部分之间至少要用一个空格作为分隔符。
指示性语句由汇编程序执行。它指出汇编程序应如何对源程序进行汇编, 如何定义变量、分配存储单元以及指示程序开始和结束等。指示性语句无 机器码指令与其相对应。
指示性语句汇编时不生成机器码。
显然,第二种写法要比第一种写法要好。
2021/1/20
23
5.3 伪操作命令
由汇编程序执行的指令,它本身不被汇编成机器指令。 常用的伪指令有:
• 数据定义伪指令 • 符号定义伪指令 • 段定义和段寄存器指定伪指令 • 过程定义伪指令 • 结束伪指令
2021/1/20
24
5.3.2 数据定义伪指令
➢ 变量在程序中作为存储器操作数被引用。 •标号和变量名的使用规则
– 组成:A-Z(不分大小写), 0-9, ?@ . _ $ – 不能以数字开头 – 长度小于31个字符 – 不能与保留字(指令助记符、伪指令、预定义符号等)重名 – 不能重复定义 例如: 正确的:LP1, AGAIN, NEXT, _GO, OK_1
(1)算术运算符—— +、-、*、/,MOD
➢ 用于数字表达式,例: MOV AX,4*1024
汇编后的形式为:
MOV AX,4096
➢ 用于地址表达式,例: LEA SI,TAB+3
若TAB的偏移地址为1000H,则汇编后的形式为:LEA
SI,1003H
2021/1/20
16
(2)逻辑运算符—— AND、OR、XOR、NOT
INT 21H
;返回DOS
CODE ENDS
;代码段结束
END START
汇编语言第5章王爽版(子程序调用指令)
例5-1:分别用三种参数传递方法编写求1+2的和的程序。要求将结果送到内存单元,并显示。
DATA SEGMENT SUM DB 0 DATA ENDS STACK SEGMENT DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START: MOV AX,DATA MOV DS,AX MOV AL, 1 MOV BL, 2 CALL subprog mov ah,4cH int 21h CODE ENDS END START
5.2 子程序的定义、调用和返回(续)
子程序返回指令(RET)
RET [n] 功能:弹出CALL指令压入堆栈的返回地址 段内返回——偏移地址IP出栈 IP←SS:[SP], SP+2 段间返回——偏移地址IP和段地址CS出栈 IP←SS:[SP],SP←SP+2 CS←SS:[SP],SP←SP+2
子程序的概念
子程序的现场保护与参数传递**
子程序的嵌套与递归调用
子程序的定义、调用和返回 **
子程序设计 *
宏汇编程序设计
教学基本内容
第5章 结构化程序设计
子程序:在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 过程(子程序):是指功能相对独立的一段程序。 主程序和子程序间的关系:调用子程序的程序称为主调程序或主程序,被调用的程序称为子程序。
Spr PROC PUSH BP MOV BP, SP MOV AX, [BP+6] MOV BX, [BP+4] ADD AL, BL OR AL, 30H MOV DL,AL MOV AH,2 INT 21H MOV SUM, AL POP BP RET Spr ENDP
汇编语言第五章
二.模块装配
连接程序(LINK)的功能 将制定的若干个目标模块(.OBJ)和子程序 库(.LIB)中的子程序模块连接在一起,生成可 执行的文件(.EXE)
二.模块装配
NAME WAN2 EXTRN DIV0:WORD, COUNT:WORD PUBLIC WAN2
DATA1 SEGMENT PARA PUBLIC ‘A1’ SUM DW 0 DATA1 ENDS STACK SEGMENT PARA STACK ‘STACK’ DB 200 DUP(0) STACK ENDS
DATA1 SEGMENT PARA PUBLIC ‘A1’ BEG EQU 1 COUNT DW 50 DIV0 DW 0 DATA1 ENDS STACK SEGMENT PARA STACK ‘STACK’ DB 200 DUP(0) STACK ENDS CODE SEGMENT PARA PUBLIC ‘B1’ ASSUME DS:DATA1, SS:STACK, CS:CODE START: MOV AX, DATA1 MOV DS, AX MOV BX, BEG MOV CX, COUNT CALL WAN2 MOV AH, 4CH INT 21H CODE ENDS END START
二.模块装配
定位方式: 连接时段首址可以不从一小段开始,从何处开始由定 位方式确定。
① PARA:该段要从能被16整除的地址处开始存放;
② WORD:该段要从一个偶数地址处开始存放; ③ BYTE:该段可以从任何地址开始存放; ④ PAGE该段要从能被256整除的地址处开始存放
。
二.模块装配
连接时把’类别’相同的所有段存放在连续
5.3 模块化程序设计
作用:用于大型程序系统的设计。通过模块
汇编教程 第五章 汇编语言程序设计基础
10
汇编语言程序设计
1
第五章 汇编语言程序设计基础
2
5.1 概述
1、程序 ( PROGRAM )是完成特定功能的一组指令的 有序集合。 2、程序设计的步骤是: 分析课题 确定算法 画流程图 合理分配存储空间和寄存器 编写程序 上机调试、修改
3
3、汇编语言源程序结构:模块、分段 4、结构化程序设计: 结构化程序设计: 1)组成:顺序、分支、循环 组成:顺序、分支、 2)要求: 要求: 模块化结构 有控制地使用无条件跳转语句 自顶向下逐步细化、 自顶向下逐步细化、逐步求精
DX 7 6 5 0 AX 3 2 1 0
AX 4 3 2 1
BL 4 3
BL 0 4
DX 7 6 5 4
AX 3 2 1 0
7
P71 例5.1
8
实验内容:
1、把BUF开始的两个字节单元中的压 缩BCD数相加,结果存入字单元RES 中。 2、以BUF为首地址的内存中存有1~ 15的平方表。查表求X单元中数(在 1~15之间)的平方值,并送回X单元。
9
5.3 分支结构程序设计
1. 分支程序二要素 具有判断和转移功能的程序。 (1) 判断:运算结果的状态标志CF,PF,ZF,SF,OF; (2) 转移:主要是条件转移指令Jcc,cc为条件。 单标志位判断……JC,JZ,JO,JP,JS,JAE(CF=0)等; 多标志位判断……JA(CF=0&ZF=0),JG(OF⊕SF=0&ZF=0),
4
一个基本的汇编语言程序框架如下:
stack stack data data code
SEGMENT PARA ‘stack‘ DB 100 DUP(‘stack’) ENDS SEGMENT <数据、变量在此定义> 数据、 ENDS
【汇编语言第3版】第5章 基本结构程序设计
第5章 基本结构程序设计
5.3 分支结构程序设计
5.3.1双分支结构程序
1.双分支结构程序的典型结构
条件 满足
汇 编 语 言 程 序 设 计
条件 不满足 程序段1 JMP 程序段2
满足
例:将AL的最高位显示出来 不满足 SHL AL,1 程序段 开始 JC NT1 MOV DL,30H Y 双分支结构程序的典型结构二 CF=1 JMP NT2 例:计算某个数的绝对值 NT1: MOV DL,31H N开始 NT2: CMP AX,0 MOV AH,02H JGE NT INT DL=0 21H Y NEG AX AX≥0 JMP NT: MOV RES,AX
第5章 基本结构程序设计
1.单个标志位的条件转移指令
C标志 Z标志 JB/JNAE/JC C=1时,转移 JAE/JNB/JNC C=0时,转移 JE/JZ Z=1时,转移 JNE/JNZ Z=0时,转移 JS S=1时,转移 JNS S=0时,转移 JP/PE P=1时,转移 JNP/JPO P=0时,转移 JO JNO O=1时,转移 O=0时,转移
第5章 基本结构程序设计
1.由多个双分支结构实现多分支结构程序设计
汇 编 语 言 程 序 设 计
例:计算符号函数SNG(X)的值 符号函数: 1 当X>0时 Y= 0 当X=0时 -1 当X<0时
开始
DATA X Y DATA CODE
AL ← X AL<0 N AL>0 Y Y ←-1 Y Y ←1
第5章 基本结构程序设计
本章主要教学内容
1.顺序结构程序的设计方法。 2.转移指令和分支程序的基本结构和设计方法。 3.循环控制指令和循环程序的基本结构和设计方法。 4.串操作指令及串操作程序设计。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.POP 指令举例
假定在执行指令:POP CX POP DX 之前,堆栈的状态如图所示。指令执行CX, DX的内容及堆栈的状态?
2000:00FBH 2000:00FCH 2000:00FD H 2000:00FEH 2000:00FFH 2000:0100H (1 )原 状 始 态 78H 56H 34H 12H ← SP
指令汇编格式: 指令汇编格式 LEA dest,src 操作: 操作 将指令中给出的存储器操作数的有效地址 (即地址的偏移量)送到指定的寄存器中。 dest←EA 受影响的状态标志位: 受影响的状态标志位 没有 说明: 说明 LEA指令是将源操作数地址的偏移量,即有 效地址传送到目标操作数中。源操作数必须是一 个存储器操作数,目标操作数可以是任一16位通用 寄存器、指针寄存器或变址寄存器。
3.POP 指令举例
假定SI=1234H, DI=5678H,则执行 下列指令后DS,ES 的内容是?
2000:00FBH 2000:00FCH 2000:00FDH 2000:00FEH 2000:00FFH 2000:0100H 条 SH 令 行 (1) 两 PU 指 执 后 78H 56H 34H 12H ← SP
2000:00FBH 2000:00FCH 2000:00FDH 2000:00FEH 2000:00FFH 2000:0100H 堆 后 (5 )BX进 之 78H 56H 34H 12H ← f stack into destination) 出栈
1
指令汇编格式: 指令汇编格式 POP dest 操作:(1)将堆栈栈顶中存放的字传送到操 操作 作数中。 dest←(SP+1,SP) (2) 堆栈指针加2 SP←SP+2 受影响的状态标志位: 没有 说明: 说明:目标操作数只能是16位的存储器或寄 存器操作数(CS除外)。
2.PUSH 指令举例
3
假定AX=1234H,BX=5678H,SS=2000H, SP=0100H,则执行下列指令后堆栈的状态是 PUSH AX PUSH BX
2000:00FBH 2000:00FCH 2000:00FDH 2000:00FEH 2000:00FFH 2000:0100H (4) SP-2 后 34H 12H ← SP
5.4 数据传送指令
数据传送指令共有12条: MOV PUSH POP XCHG XLAT LEA LDS LES LAHF SAHF PUSHF POPF
1
1. MOV(move)传送
指令汇编格式: 指令汇编格式 MOV dest,src 操作: 操作 将一个源操作数(字节或字) 传送到目 标操作数中。 dest←(src) 受影响的状态标志位: 没有 说明: 指令中dest和src不能同时为存储器操 作数; CS不能做为目标操作数使用,段寄存器 之间不能互相传送,立即数不能送入段寄存器。
2
10H 2000:1000H ?? 2000:1001H
2.PUSH(push word onto stack)进栈
指令汇编格式: 指令汇编格式 PUSH src 操作:堆栈指示器减 2 操作 SP←SP-2 将给定的操作数存放到由SP指出的栈顶中。 (SP+1,SP)←(src) 受影响的状态标志位: 没有 说明: PUSH指令的目标地址一定在当前堆栈中。 SS内容为段基址,偏移量由堆栈指针SP指出。操 作数一定是16位的寄存器或存储器操作数。
5.3 程序的基本控制结构
S1 S2 S3 条件=真 N S2 Y S1
(1) 顺序结构
(2) 分支(选择)结构
S1 条件=真 N Y
条件=真 Y S1
N S2
(3) 循环(迭代)结构
5.3 程序的基本控制结构
• 三种结构的共同特点:只有一个入口和 一个出口; • 模块化程序设计方法:分解成若干功能 独立的模块,然后一个模块一个模块设 计和调试;优点是: • 结构化程序设计:组成程序的每个模块 都必须有三种基本控制结构组成。优点 是:
2000:00FBH 2000:00FCH 2000:00FDH 2000:00FE H 2000:00FFH 2000:0100H (2 )SP-2 后 ← SP
2000:00FBH 2000:00FCH 2000:00FD H 2000:00FEH 2000:00FFH 2000:0100H 堆 (3) A X进 后 34H 12H ← SP
2
2000:00FBH 2000:00FCH 2000:00FDH 2000:00FEH 2000:00FFH 2000:0100H (2 ) POP CX执 后 行 78H 56H 34H 12H ← SP
2000:00FBH 2000:00FCH 2000:00FDH 2000:00FEH 2000:00FFH 2000:0100H (3 )POP DX执 后 行 78H 56H 34H 12H ← SP
第五章 顺序结构程序
5.1 程序设计的步骤 5.2 流程图的应用 5.3 程序的基本控制结构 5.4 数据传送指令 5.5 算术运算指令 5.6 逻辑操作指令 5.7 移位操作指令 5.8 状态标志位操作指令 5.9 简单的I/O功能调用 5.10 顺序结构程序举例
5.1 程序设计的步骤
1. 分析问题:已知条件、原始数据、输入信息、
MOV DS,2000H MOV SI,[SI] MOV [DI],[SI] MOV 10,AL MOV DX,BH PUSH AL MOV DS,CS
4. XCHG (Exchange) 交换
1
指令汇编格式: 指令汇编格式: XCHG dest,src 操作: 操作 dest的内容与src的内容互换。 (dest)←→(src) 受影响的状态标志位: 没有 说明: 说明 dest和src不能同时为存储器操作数。 段寄存器、立即数不能作为操作数。
5. 上机调试:反复调试和修改;
5.2 流程图的应用
(1) (2) (3) (4) (5) 流程线 端点框 判断框 处理框 连接框
1、描述的算法结构清晰、直观、形象,便于了解程 序全貌和各程序段之间的逻辑关系; 2、有助于查找和分析程序的逻辑错误; 3、便于相互交流; 4、不能表示数据的类型和结构。
4. XCHG指令举例
XCHG XCHG XCHG XCHG XCHG XCHG XCHG XCHG AL,BL CL,[BX] BL,[BX+SI+10] AX,AX AL,SI [SI],[BX+10] DX,DS AL,10
2
5. XLAT (translate) 转换表
指令汇编格式: 指令汇编格式 XLAT 操作:BX和AL内容之和指出的内存字节单元的 操作 内容送到AL中。 AL←(BX+AL) 受影响的状态标志位: 受影响的状态标志位 没有 说明: 说明 XLAT指令用于查表。表的开始地址即表 头地址由BX寄存器给出。AL中的原始值是要寻 址的表中元素地址的位移量,规定表中第一个 字节的位移量为0。这是一种特殊的基址变址 寻址方式,基址寄存器为BX,变址寄存器为AL。
2
5. XLAT 应用举例
JMTAB +1 59H 5AH 44H 4DH 52H 4EH 48H 58H 4AH 4CH 49H 4FH 51H 55H 57H 41H
3
+2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15
JMTAB DB DB MOV MOV MOV MOV SUB MOV ADD MOV
JMTAB
5
59H +1 5AH +2 44H +3 4DH +4 52H +5 4EH +6 48H +7 58H +8 4AH +9 4CH +10 49H +11 4FH +12 51H +13 55H +14 57H +15 41H +16 43H +17 42H +18 45H. +19 47H +20 46H
1
5. XLAT 应用举例
看如下的一种加密方式(替代加密): A B C D E F G H I J K L M N O P Q Y Z DMR N H XJ L I O Q U W A C R S T U V W X Y Z B E G F K P T SV 明文:THIS IS A COMPUTER 密文:GXJE JE Y DWQAFGRB
2000:00FBH 2000:00FCH 2000:00FDH 2000:00FEH 2000:00FFH 2000:0100H (2 )执 行POP DS后 78H 56H 34H 12H ← SP
3
PUSH PUSH POP POP
SI DI DS ES
2000:00FBH 2000:00FCH 2000:00FDH 2000:00FEH 2000:00FFH 2000:0100H (3) 执 行POP ES后 78H 56H 34H 12H ← SP
指令汇编格式: 指令汇编格式 LDS dest,src 操作:(1)将双字长存储器操作数中的低地址字传送到 操作 指定的寄存器中。 dest←(EA) (2)将双字长存储器操作数中的高地址字传送到 DS寄存器中。 DS←(EA+2) 受影响的状态标志位: 受影响的状态标志位 没有 说明: 说明 LDS是将src指出的连续两个字的内容,即一个32 位的指针变量传送到一对16位的目标寄存器中。高位 字为段基地址,LDS指令将其传送到数据段寄存器DS中, 低位字为偏移量,传送到由dest指出的一个通用寄存器, 指针寄存器或变址寄存器中,但不能是段寄存器。