汇编语言第六章
汇编语言第六章

6.3
操作.
串操作指令
包括串传送、存取、比较、扫描等
利用串操作指令可以直接处理两个存储
器操作数,方便地处理字符串或数据块。
串指令的特点
(1).指令格式
串指令可以显式地带有操作数,也可以使 用隐含格式。例如串传送指令MOVS,可以有以 下几种格式:
显式:MOVS DST,SRC
隐式:MOVSB ;字节传送
第6章 循环程序设计
6.1 循环结构程序设计
一、循环结构程序概述
在程序中,凡能有规则重复执行的程序段 称作循环。
包含循环程序段的程序称为循环结构程序。
1、循环程序的组成
循环的初始状态:设置一些初值,如设寄存器、
计数器的初值等。
循环体:由工作部分和修改部分构成。工作部
分是循环程序具体要完成的功能,是循环的主 . 要部分,修改部分是控制循环的一些参数有规
LODSD
功能:源→累加器,即([SI]) →AL(或AX、 说明:若DF=0,则LODSB(或LODSW)使SI加1(或 2);若DF=1,则LODSB(或LODSW)使SI减1(或2)。 标志:不影响标志位。
② 自buffer1开始的10个非压缩BCD码形式存放的十进
制数转换成ASCII码,按顺序显示在屏幕上。设DS、ES 已按要求设置
作业从自然数作业从自然数1开始累加直到累加和大于500为止统计被累加的自然数的个数并把统计的个数送入单元为止统计被累加的自然数的个数并把统计的个数送入单元n中把累加和送入单元sum中
思考题: 下面的代码段完成什么功能?
MOV cx,20 LAST:MOV AL,[SI] MOV ES:[DI],AL INC SI INC DI DEC CX JNZ LAST
第六章 汇编语言程序设计

AA:
SUB MOV MOV HLT
BX,AX DI, 2800H [DI],BX
16
改: CLC CMP JC SUB MOV MOV HLT AA: SUB MOV MOV HLT BX,AX DI, 2800H [DI],BX
17
AX,BX AA AX,BX DI, 2800H [DI],AX
CMP JZ CMP JZ MOV JMP NEXT: DONE: MOV HLT AL, 'y ' ;比较AL与小写字母y NEXT ;相等,转移到NEXT AL, 'Y ' ;不是小写字母y,是大写字母Y ? NEXT AH,-1 ;相等,转移NEXT ;不是大Y ,令AH=-1 Y AH 1
DONE ;无条件转移DONE AH,0 ;是Y或Y,令AH=0
AL,BL , AL,0 , STOR AL,80H , MINUS AL, 1 , STOR AL,0FFH , BH,AL ,
;取X ;X=0,Y=X , ;X<0 < ;X>0,Y=+1 > , X<0,Y= -1 < , ;保存Y 保存
MINUS: : STOR: :
MOV MOV HLT
例4,判断是否为字母 .若AL中是字母Y(含大小写),则令AH ,判断是否为字母Y. =0,否则令AH=-1
为奇数, ;否则AX为奇数,加1 否则 为奇数 ;AX←AX÷2 ÷
12
法2:将最低位用移位指令移至进位标志,判断进位标志 :将最低位用移位指令移至进位标志, 就是偶数; 是0,AX就是偶数;否则,为奇数 , 就是偶数 否则,
MOV SHR JNC ADD E1: SHR
汇编语言第6章

外设
内存
CPU
DMA控制器
4.中断传送 在查询传送方式中,CPU与外设串行工作,外设在进行I/O操作时,CPU并未进行其它的工作而是处于长时间反复查询的等待状态。为提高CPU的效率,采用中断方式,中断的特点是CPU与外设并行工作,即CPU启动外设之后,不再等待外设工作的完成,而是执行另一个程序。输入时,当外设就绪,主动向CPU发出中断请求,让CPU为其服务,CPU接到请求后,暂时中断现行程序的运行,转去执行处理相应的中断服务程序,完成所需的数据输入,当处理结束后,CPU又返回到被中断程序的断点处继续往下执行原来中断了的程序;在输出时,当外设空闲时,向CPU发出中断请求,CPU暂停当前程序的执行,转去执行相应中断服务程序,完成所需的数据输出,然后再返回去执行原来中断了的程序。这种方式避免了CPU反复查询外设的状态而浪费时间,节省大量的CPU时间,又可以使多台外围设备与CPU并行工作。
三、I/O的传送方式
外设与CPU之间进行数据、状态和控制三种信息传送,这些信息以四种方式进行传送。 1.无条件传送 当外设的数据传送是定时的,即外设与CPU同步的情况下,CPU不需要查询外设的状态,而直接用IN或OUT指令实现CPU与指定的外设寄存器之间的信息传送。如当输入信息是开关量时,开关已设定,只要用输入指令,肯定会读入开关的状态。无条件传送是最简单的数据传送方式,它所需要的硬件和软件都是最节省的,但这种方式必须在已知并确信外设已处于准备就绪的情况下才能使用,否则就会出错。
汇编语言第六章PPT

具有对数据的锁存能力; 不具备对数据的控制能力
24
常用锁存器芯片
74LS273 8D触发器,不具备数据的控制能力
P239图
74LS373 含三态的8D触发器,具有对数据的控 制能力
25
锁存器芯片74LS374
做输出口:
Q0 D0~D7 Q0~Q7
做输入口:
D0
. . .
译码器
CP OE Q7
外设向DMA控制器发出“DMA传送请求”信 号DRQ;
DMA控制器收到请求后,向CPU发出“总线 请求”信号HOLD; CPU在完成当前总线周期后会立即发出HLDA
信号,对HOLD信号进行响应;
DMA控制器收到HLDA信号后,就开始控制总 线,并向外设发出DMA响应信号DACK
40
DMA控制方式的工作过程
复杂性
实时性 异步性
与设备无关性
3
二、I/O接口和端口
I/O接口:
将外设连接到总线上的一组逻辑电路的总称。
实现外设与主机之间的信息交换。
I/O端口:
接口中的寄存器
4
接口的功能
数据的缓冲与暂存
信号电平与类型的转换 增加信号的驱动能力 对外设进行监测、控制与管理,中断处理
8
端口与内存的统一编址
特点:
00000H 内存 地址 960KB F0000H I/O地址 64KB FFFFFH
9
优点:指令与内存指令统一 缺点:内存地址资源减少
端口的独立编址
特点:
00000H
汇编语言第六章答案

6.1 下面的程序段有错吗?若有,请指出错误。
CRAY PROCPUSH AXADD AX, BXRETENDP CRAY答:程序有错。
改正如下:CRAY PROCADD AX, BXRETCRAY ENDP ;CRAY是过程名,应放在ENDP的前面6.2 9BHF7H57H80HF0A0:00B0H先PUSH,SP-2再PUSH,SP-2POP, SP+26.2 题堆栈及SP内容的变化过程已知堆栈寄存器SS的内容是0F0A0H,堆栈指示器SP的内容是00B0H,先执行两条把8057H 和0F79BH分别入栈的PUSH指令,然后执行一条POP指令。
试画出示意图说明堆栈及SP 内容的变化过程。
答:变化过程如右图所示:6.3 分析下面的程序,画出堆栈最满时各单元的地址及内容。
;********************************************S_SEG SEGMENT AT 1000H ;定义堆栈段DW 200 DUP (?) ;200*2=190HTOS LABEL WORDS_SEG ENDS;********************************************C_SEG SEGMENT ;定义代码段ASSUME CS: C_SEG, SS: S_SEGSTART: MOV AX, S_SEG(FLAGS)(AX)T_ADDR0000(DS)1000:0184:0186:0188:018A:018C:018ESP:01866.3 题堆栈最满时各单元的地址及内容MOV SS, AXMOV SP, OFFSET TOSPUSH DSMOV AX, 0PUSH AX┇PUSH T_ADDRPUSH AXPUSHF┇POPFPOP AXPOP T_ADDRRET;-------------------------------------------------------------------------- C_SEG ENDS ;代码段结束;******************************************END START ;程序结束答:堆栈最满时各单元的地址及内容如右图所示:6.4 分析下面的程序,写出堆栈最满时各单元的地址及内容。
《汇编语言》第2版 第六单元

6.2 在代码段中使用栈
程序6.3 codesg cs:codesg 程序6.3 assumesegment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 start:mov start:mov ax,cs mov ss,ax mov sp,30h ;将设置栈顶 ;将设置栈顶SS:SP指向CS:30 将设置栈顶SS:SP指向 指向CS:30 mov bx,0 mov cx,8 s: push cs:[bx] add bx,2 loop s ;以上将代码段0~15单元中的8个字型数据依次入栈 ;以上将代码段 以上将代码段0~15单元中的 单元中的8 mov bx,0 mov cx,8 s0: pop cs:[bx] add bx,2 loop s0 ;以上依次出栈8个字型数据到代码段0~15单元中的 ;以上依次出栈 个字型数据到代码段0~15单元中的 以上依次出栈8 mov ax,4c00h int 21h codesg ends end start ;指明程序的入口在start处 指明程序的入口在start处
6.1 在代码段中使用数据
注意在程序6.2中加入的新内容, 注意在程序6.2中加入的新内容,我们在 中加入的新内容 程序的第一条指令的前面加上了一个标 start,而这个标号在伪指令end的后 号start,而这个标号在伪指令end的后 面出现. 面出现.
6.1 在代码段中使用数据
探讨end的作用 探讨end的作用: 的作用: end 除了通知编译器程序结束外,还 除了通知编译器程序结束外, 可以通知编译器程序的入口在什么地 方.
6.1 在代码段中使用数据
汇编课件 第6章

DATA SEGMENT BIN1 DB 35H BIN2 DW 0AB48H
CUNT DB 8,16
ASCBUP DB 20H DUP(?) ADR_TAB DW 3 DUP(0) ;存放参量地址表
DATA ENDS
第二十四页,共38页。
主程序中有关指令序列修改为:
...... MOV ADR_TAB,OFFSET BIN1 ;存参量地址
源程序的数据段和堆栈安排如下:
DATA SEGMENT
BIN1 DB 35H
BIN2 DW 0AB48H
ASCBUF DB 20H DUP(?) DATA ENDS STACK1 SEGMENT PARA STACK
DW 20H DUP(0) STACK1 ENDS
由于参量的传递方式有多种形式,其相应地在子程序中取入 口参量的方法也有所不同。下面介绍三种参量的传递方法:
CALL BINASC16 ......
第二十五页,共38页。
转换子程序设置两个入口,一个是转换8位数据的入口BINASC8,另一个是 转换16位数据的入口BINASC16。
BINASC PROC
BINASC8: MOV DI,[BX];取待转换8位数据 MOV DH,[DI]
JMP TRAN
BINASC16:MOV DI,[BX] ;取待转换16位数据
第二十二页,共38页。
SP
SP+2
SP+4 SP+6 SP+8
DI
BP
DX
CX
AX
返回地址
ASCII码首址
位数
待转换数据
子程序中保存信息并 执行MOV BP,SP后
汇编语言第六章

三.中断向量表
3. 设置或取出中断向量指令 (1) 设置中断向量指令 功能:把由AL指定的中断类型的中断向量DS:DX放入中
断向量表中。
(AH)= 25H
(AL)= 中断类型号
DS:DX = 中断向量 INT 21H
三.中断向量表
(2) 取出中断向量指令
功能:把AL中指定的中断类型的中断向量从中断
一、 WIN32编程基础
(2) 循环控制伪指令
格式:.WHILE 条件表达式 循环体 .ENDW 格式:.REPEAT 循环体 .UNTIL 条件表达式 格式:.CONTINUE 功能:终止本次循环, 开始下一次循环 格式:.BREAK 功能:退出当前循环
功能:实现循环结构
一、 WIN32编程基础
内中断的处理特点: ①中断类型号一般在指令中; ② 不受中断允许标志位IF的影响。
二、 中断源
2. 外中断 由外设控制器、协处理器等CPU以外的事件引起的中断, 称为外中断。 外中断的处理特点: ① 中断类型号由8259A提供,或由自制电路来提供;
② 受中断允许标志位IF的影响(IF=1,响应中断)。
个字节。
三.中断向量表
如:INT 4AH
中断向量地址 = 4AH*4 = 128H
DEBUG执行后, 用D命令查看: ―D0:0↙ … 执行INT 4AH时: IP=1805H CS=F000H IP F000: 1805 中断处理
0:128H
0:129H
05 18
0:12AH
0:12BH
00
F0 …
外设
二、 外设与主机传送的接口与信息
接口的组成:设备状态寄存器、设备控制寄存 器、数据寄存器。 I/O端口的地址空间:允许设置64K个8位端口 或32K个16位端口。 如:40H~43H时钟/定时器,60H~63H为 8255通讯芯片的接口。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
前面的例子中语句 REP MOVSB 和它等价的程序段是什么?
LAST:MOV AL,[SI] MOV ES:[DI],AL INC SI INC DI LAST: MOVSB LOOP LAST
串传送演示
LOOP LAST
二、串指令
2.取串指令 LODS
显式格式:LODS SRC
例题演示
隐含格式:LODSB, LODSW, LODSD
6.5 循环程序举例
例 6.1 :把 BX 中的二进制数以十六进制的 形式显示在屏幕上.
BX
1 2
3
4
…… MOV CH, 4 ; 遍数 A5: MOV CL, 4 ; 移位次数 ROL BX, CL MOV AL, BL AND AL, 0FH ADD AL, 30H ; ’0’~’9’ CMP AL, 3AH ;是否大于9 JL DSP ADD AL, 7H ; ’A’~’F’
隐含格式:CMPSB,CMPSW,CMPSD
功能:源-目标,即([SI])-(ES:[DI]),并 且根据指令执行结果设置标志位。 REPE/REPZ CMPS :指令结束后如果Zf为1, 表明两串数据相等,Zf为0,表明至少有一个元 素不相等。
上机作业:字符串比较
设数据区有两个字节串,串1的长度为5, 串2的长度为10。
请判பைடு நூலகம்:
若串2的最后5 个字符和串1 相同,
则置FLAG单元为“Y”,否则置为“N”
STRING1 DB ‘ ….. ’ STRING2 DB ‘………..’ FLAG DB ‘Y’ MOV SI,OFFSET STRING1+4 MOV DI,OFFSET STRING2+9 MOV CX,5 STD REPE CMPSB JZ EXIT MOV FLAG , ‘N’ EXIT: MOV AH, 4CH INT 21H
5.串扫描指令 SCAS
(搜索关键字)
显式格式:SCAS DST
隐含格式:SCASB, SCASW, SCASD
功能:
累加器-目标,即(AL(或AX))-(ES:[DI]),并且
根据指令执行结果设置标志。
指令执行后,DI自动指向下一个元素,若Zf=1,说
明相等。
如果用REPE SCASB,指令执行后,DI自动指向下 一个元素,若Zf=1,说明串中每一个都与目标相等。
例题 6-8(142页)
• 在数组X中查找-1,找到后删除,后 续元素前移,并修改数组元素长度。 • 要求用串扫描指令SCAS
④在一首址为ARY长度为20的字符串查找字符 “*”,如果找到,则将结果单元RESULT清0, 否则结果单元为全1。
LEA DI, ARY MOV [RESULT],0FFH MOV CX,20 MOV AL,’*’ REPNE SCASB JNZ END1 MOV [RESULT],0 END1: HLT
功能:源→累加器,
即([SI]) →AL(或AX、EAX),
且自动修改SI指针。
② 自buffer1开始的10个非压缩BCD码形式存放 的十进制数转换成ASCII码,按顺序显示在屏幕 上。设DS、ES已按要求设置
LEA SI, buffer1 MOV CX, 10 CLD MOV AH , 02H
GET: LODSB OR AL ,30H MOV DL ,AL INT 21H LOOP GET
3.存串指令 STOS
显式格式:STOS DST
隐含格式:STOSB,STOSW,STOSD 功能:累加器→目标, (AL(或AX、EAX))→ES:[DI],
且自动修改DI指针。
③ 把自buffer1开始的非压缩BCD码存放的十进 制数转换成ASCII码,并放到buufer2中,字符串 长度为10字节。设DS、ES已按要求设置
要求从键盘动态输入20个数,并且
都是两位数。(bj1.asm)
x dw 201,12,130,55,44,77,-15,180,190,20 y dw ? ……….. 思考: ………….. 此程序段完成什么 MOV AX , X 功能? MOV BX , OFFSET X MOV CX , 9 L1: INC BX INC BX CMP AX , [BX] JAE L2 XCHG AX , [BX] L2: LOOP L1 MOV Y , AX
功能:源→目标,即([SI])→ES:[DI], 且自动修改SI、DI指针。 标志:不影响标志位。
动画演示
思考:如何把自buf1开始的100个字节数据 传送到buf2开始的区域中(要求用串传送指 令)。 LEA LEA MOV CLD REP SI, buf1 DI, buf2 CX, 100 MOVSB
-126~129
(CX)=0, 转
这些指令对状态标志位都没影响.
循环次数CX
循环次数CX
循环体
循环体
(CX)-1
CX
(CX)-1
CX
ZF=0?
N
(CX)=0?
Y
N
ZF=1?
Y N
LOOPNE/LOOPNZ
(CX)=0?
Y LOOPE/LOOPZ
LOOP操作图
例1:在屏幕上显示10行 “how do you do”,
作业
从自然数1开始累加,直到累加和大于500为止, 统计被累加的自然数的个数,并把统计的个 数送入单元 N 中,把累加和送入单元 SUM 中。 (sum1.asm) 分析:用两个寄存器,一个放累加的次数,一 个放累加的和,条件控制法.
上机作业:
把x单元开始存放的20个无符号数
中的最大数送z单元,并显示出最大数。
动画
操 作 数 说 指令功能说明 明
(cx) (cx)-1,(cx≠ 0),循环 (CX) (CX)-1,(CX≠ 0), ZF=1, 循环 (CX) (CX)-1,(CX≠ 0), ZF=0, 循环
LOOP <标号 > LOOPZ <标号 > 均 为 短 标 LOOPE <标号 > 号 LOOPNZ <标号 > 范围: ( -128~127) +2 LOOPNE <标号 > JCXZ <标号 > 即:
思考: 下面的代码段完成什么功能?
MOV CX,20 LAST:MOV AL,[SI] MOV ES:[DI],AL INC SI INC DI DEC CX JNZ LAST
第6章 循环程序设计
6.1 循环结构程序设计
一、循环结构程序概述 在程序中,凡能有规则重复执行的程 序段称作循环。
包含循环程序段的程序称为循环结构
WHILE结构的循环控制伪指令的格式为: .WHILE 条件表达式 循环体 .ENDW UNTIL结构格式为: .REPEAT 循环体 .UNTIL 条件表达式 UNTIL结构还有一种格式: .REPEAT 循环体 .UNTILCXZ [条件表达式] ;cx←cx-1,直到cx=0或条件为真
下面代码段完成的功能?
XOR AX, AX MOV CX,100 .WHILE CX!=0 ADD AX,CX DEC CX .ENDW MOV SUM , AX
Mov cx,100 .repeat add ax,cx dec cx .until ——
Mov cx,100 .repeat ———— ———— .untilcxz
例6-3:将正数 n 插入一个已整序的正数字数组(按递 增顺序)
x
dw
?
ary_head
x
ary_head dw 3,5….99 ary_end n dw dw 105 32
(5)重复前缀
串指令前可以加重复前缀REPE/REPZ、 REP或REPNE/REPNZ,使后跟的串指令重复
执行。
重复次数应事先初始化在计数器CX。
二、串指令
串传送指令允许目的串和源串 都是存储器操作数,在这一点 上有别于M0V指令。
1.串传送指令 MOVS
显式格式:MOVS DST, SRC
隐含格式:MOVSB,MOVSW,MOVSD
MOVSW
MOVSD
;字传送
;双字传送
(2)操作数
串指令可以处理累加寄存器和存储器操作
数。对于存储器操作数应先建立地址指针:
若为源操作数,则必须把源串首地址放入SI
寄存器,缺省情况寻址DS所指向的段。
若为目标操作数,则必须把目标串首地址放
入ES:DI寄存器,不允许使用段超越前缀。
(3)地址指针的修改 串指令执行后自动修改地址指针 SI、DI。 (4)方向标志 方向标志DF决定地址指针的增减 方向。 若DF=0,则地址指针增量; 若DF=1,则地址指针减量。
DSP: MOV DL , AL MOV AH , 2 INT 21H DEC CH JNZ A5 ……
例6-2:从键盘接收十进制数并存入 BX
MOV BX, 0 NEWCHAR: MOV AH, 1 INT 21H SUB AL, 30H JL EXIT ; <0退出 AL, 9 (( ( 0×10)+1 )× CMP JG EXIT 10+2 )×10+5 Bx始终放转换 CBW XCHG AX, BX 后用的数 MOV CX, 10 MUL CX XCHG AX, BX ADD BX, AX 演示 JMP NEWCHAR EXIT: ……
程序名:
exa.asm
例2:求1~N自然数的和,结果存在 X字单元。 程序如下: MOV MOV DONE:ADD LOOP MOV
AX, 0 CX, N AX,CX DONE ;和它等价的指令是? [X],AX
思考题: 1.下列描述错误的是_______。 A.LOOP指令以CX为循环控制计数器 B. LOOPNE指令循环的条件是CX≠0且ZF=0 C. LOOPE指令循环的条件是CX≠0且ZF=1 D. LOOPE指令循环的条件是CX≠0且ZF=0 2.下列指令中不能构成循环条件的是()。 A. JMP B. JNZ C. LOOP D. DEC CX