slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
第九讲 第四章 8086/8088 汇编语言程序设计 2006.11.14 (星期二) PowerPoint Presentation
Download Presentation
第九讲 第四章 8086/8088 汇编语言程序设计 2006.11.14 (星期二)

Loading in 2 Seconds...

play fullscreen
1 / 43

第九讲 第四章 8086/8088 汇编语言程序设计 2006.11.14 (星期二) - PowerPoint PPT Presentation


  • 106 Views
  • Uploaded on

第九讲 第四章 8086/8088 汇编语言程序设计 2006.11.14 (星期二). 主要内容: 1. 中断指令 2. 汇编语言程序设计. 介绍几条指令: INT n , IRET 格式: INT n ; n— 常数或表达式, n=0—255 或 INTO 执行操作: (SP)←(SP)-2 , (SP)) ← (PSW) (SP)←(SP)-2 , (SP)) ← (CS) (SP)←(SP)-2 ,← (IP) (IP) ←(N×4) (CS) ←(N×4+2)

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '第九讲 第四章 8086/8088 汇编语言程序设计 2006.11.14 (星期二)' - julian-patterson


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

第九讲

第四章 8086/8088汇编语言程序设计

2006.11.14(星期二)

主要内容:

1.中断指令

2.汇编语言程序设计

slide2

介绍几条指令:INT n,IRET

格式:INT n ; n—常数或表达式,n=0—255或INTO

执行操作:

(SP)←(SP)-2, (SP)) ←(PSW)

(SP)←(SP)-2,(SP)) ← (CS)

(SP)←(SP)-2,← (IP)

(IP) ←(N×4)

(CS) ←(N×4+2)

清除IF、TF,避免进入中断以后不被外面其它中断所打断

及进入中断以后按单步执行。

例:.某中断程序入口地址为3375H:1234H,放置矢量表位置为0000H:0180H。问此中断类型号为___,写出入口地址在矢量表中放置顺序(由低到高)____________________。

slide3

类型0~3的中断称为内部中断。

  •  类型0 :指令系统没有INT0这条指令
    • 除数为0中断
  • 除数为0 :它既不是外部中断 也不是软件中断。
  • 是由 CPU自身产生的,所以无对应中断指令。
    • 有符号数进行除法所得的商超出规定范围
  • 有符号数进行除法运算,所得的商超出规定范围,
  • CPU自动产生类型为0的中断,转入响应的中断处理程序。
slide4

内存0:0000H~0:03FFH区域中,构成中断向量表,存放中断处理程序入口地址。每4个单元对应1个中断源。关系如下表:内存0:0000H~0:03FFH区域中,构成中断向量表,存放中断处理程序入口地址。每4个单元对应1个中断源。关系如下表:

slide5

∴ INTO跟在有符号数+、-后面:

* 这条指令可以写在一条算术指令后面。

若产生溢出,OF=1,则启动中断过程,不进行任何操作。

(2) IRET——从中断返回指令(Interrupt return)

所有中断过程(服务程序)不管是硬还是软,最后一条指令一定是:

IRET退出中断过程,返回中断时断点。

格式:IRET

执行操作:(IP)←((SP)+1,(SP)) , (SP) ←(SP)+2

(CS)←((SP)+1,(SP)) , (SP) ←(SP)+2 ( PSW)←((SP)+1,(SP)), (SP) ←(SP)+2

slide6

六、处理器控制指令

(一)标志处理指令

1、CLC (Clear carry flag ) 清CF标志

2、STC(Set carry flag ) 置CF标志

3、CMC(Complement carry flag ) 对CF求反

4、CLD(Clear direction flag ) 清DF标志

5、STD(Set direction flag ) 置DF标志

6、CLI(Clear interrupt flag ) 清IF标志

7、 STI (Set interrupt enable flag ) 置IF标志

(二)其他处理机控制指令

1、NOP(No operation ) 空操作

2、 HLT(Halt ) CPU暂停状态

3、 WAIT (Wait while pin not asserted ) CPU等待状态

4、 ESC(Escape ) 交权

5、 LOCK(Lock bus ) 总线锁定

slide7

第四章 8086/8088汇编语言程序设计

4.1 概述

4.2 汇编语言的基本语法

4.3 汇编语言程序设计的基本方法

4.4 DOS/BIOS中断调用

4.1 概述

汇编语言程序的上机处理过程

主要的汇编程序:MASM、TASM

slide8
例:求从1开始连续50个奇数之和,并将结果存放在名字为SUM的字存储单元中.其汇编源程序如下:例:求从1开始连续50个奇数之和,并将结果存放在名字为SUM的字存储单元中.其汇编源程序如下:

DATA SEGMENT ;定义数据段, DATA为段名

SUM DW 0 ;由符号(叫变量名)SUM指定的内 存单元类型,定义一个字,初值为0

DATA ENDS ; 定义数据段结束

STACK SEGMENT STACK ;定义堆栈段,这是组合类型伪 指令,它规定在伪指令

后须跟STACK变量名

DB 200 DUP(0) ;定义堆残段为 200个字节的连 续存储区,且每个字节的值为0

STACK ENDS ;定义堆栈段结束

CODE SEGMENT ;定义代码段

ASSUME DS: DATA, SS: STACK,

CS:CODE ;由ASSUM伪指令定义各段寄存器

slide9

初始化

START:MOV AX,DATA ;将DS初始化为数据段首 MOV DS,AX ;地址DATA

MOV CX,50 ;CX置入循环计数值

MOV AX,0 ;清AX累加器

MOV BX,l ;BX置常量1

NEXT: ADD AX,BX ;累加奇数和,计50次

INC BX ;求下一个奇数

INC BX

DEC CX ;循环计数器作减1计数

JNE NEXT ;未计完50次时,转至 NEXT循环 MOV SUM,AX; 累加和送存SUM单元

MOV AH,4CH ;DOS功能调用语句,机器 将结束本程序的运行,并返

回DOS状态(4CH为DOS 程序的入口地址)

INT 21H

CODE:ENDS ;代码段结束

END START ;整个程序汇编结束

slide10

4.2 汇编语言的基本语法

1. 常量、变量和表达式

  • 常量

二进制 xxxxxxxxB 01000101B

八进制 xxxO 或xxxQ 721O或721Q

十进制 xxxx或xxxxD 1991或1991D

十六进制 xxxxH 0F1D4H

字符串 ‘xxx’或“xxx” ‘AB’ 以ASCII编码

数值常量、符号常量(用EQU或=定义)

slide11

变量

  • 内存单元的名字,由DB/DW/DD/DQ/DT定义
  • BUF DB ?
  • MOV BUF,AL
  • 变量的三种属性:
    • 段值 SEG
    • 偏移量 OFFSET
    • 类型 BYTE/WORD/...
slide12

标号

  • 指令存放单元的符号地址,是转移/调用/循环指令的操作数
  • 标号的三种属性:
    • 段值 SEG
    • 偏移量 OFFSET
    • 类型 NEAR/FAR
slide13

表达式

由操作数和运算符组成的序列

操作数可以是寄存器、常量(数值常量、符号常量)、存储器操作数(标号、变量)

运算符包括:算术运算符、逻辑运算符、关系运算符、数值返回运算符和属性运算符

slide14

数值返回运算符(分析运算符)

  • SEG 变量/标号
  • OFFSET 变量/标号
  • TYPE 变量/标号
    • 变量返回类型:1字节、2字、4双字
    • 标号返回类型:-1NEAR、-2FAR
  • LENGTH 变量:返回变量的个数
  • SIZE 变量:返回变量所占地字节数
slide15

2. 指令语句

标号: 指令助记符 操作数 ;注释

START:MOV AX,DATA ;将DS初始化为数据段首

slide16

3. 伪指令语句

名字 伪操作命令 操作数 ;注释

  • 符号定义语句
  • 定义符号常量
    • PRICE EQU 281
    • PORT = 6
    • PORT = PORT +1
slide17

数据定义语句

定义变量、分配存储单元等

变量名 DB/DW/DD/DQ/DT 操作数,…,操作数

操作数可以是:数值表达式或表、字符串、?、N DUP表达式

VAR DW ?

ARRAY DB 100 DUP(0);DUP为重复符号

ARR2 DB 100 DUP(0,2DUP(3,2))

定义500个字节并设初始值

slide18

段定义语句

  • 过程定义语句(子程序定义)
  • 程序结束语句

END 表达式

表达式为程序的第一条指令的地址

slide19

汇编语言的基本语法

  • 常量

数值常量, 01000101B, 32, 0F1D4H

符号常量(用EQU或=定义)

  • 变量

内存单元的名字,由DB/DW/DD/DQ/DT定义

  • 标号

指令存放单元的符号地址,是转移/调用/循环指令的操作数

slide20

指令语句

执行性的语句,汇编时汇编程序将其转换成机器目标代码

标号: 指令助记符 操作数 ;注释

  • 伪指令语句

说明性的语句,为汇编程序提供进行汇编所需要的有关信息,如定义符号、分配存储单元等,不生成目标代码

名字 伪操作命令 操作数 ;注释

slide21
分类 助记符
  • 符号定义伪指令 EQU,=,LABEL
  • 数据定义伪指令 DB,DW,DD,DQ*,DT*,RECORD*, STRUC*
  • 段定义伪指令 SEGMENT, ENDS, GROUP*, ASSUME, ORG
  • 过程定义伪指令 PROC, ENDP
  • 模块定义与通信伪指令 EXTRN*,PUBLIC*,NAME,END
  • 宏处理伪指令* MACRO*, ENDM*, LOCALA*, REPT*, IRPC *, IRP*,PURGE*
  • 条件汇编伪指令* IF,ENDIF,IFI,IFZ,IFB,IFNB,IFE, IFDIF,IFDEF,IFNDEF,

IFIDN,EISE

  • 列表伪指令 PAGE, TITLE, SUBTTL*, LIST, XLIST, % OUT*
  • 其他伪指令 COMMENT*, RADIX*, INCLUDE, EVEN*
slide22

实模式汇编语言源程序的结构——完整的段定义实模式汇编语言源程序的结构——完整的段定义

DATA SEGMENT

…...

DATA ENDS

STACK SEGMENT STACK

…...

STACK ENDS

CODE SEGMENT

ASSUME DS:DATA, SS:STACK, CS:CODE

START: ……

CODE ENDS

END START

slide23

段寄存器定义伪指令

ASSUME 段寄存器:段名 [,段寄存器:段名,...]

  • ASSUME语句习惯上作为代码段的第一条指令
  • ASSUME语句是非执行性的伪指令,段寄存器的初值必须在程序中用指令设置。

CSEG SEGMENT

ASSUME CS:CSEG, DS:DSEG

MOV AX, DSEG

MOV DS, AX

…...

  • 对CS的赋值由操作系统装入EXE文件时自动完成
slide24

4.3程序设计的基本方法

  • 分支结构

IF … THEN … ELSE

TEST AX, 1

JZ LY

N

Y

LN: …...

条件

JMP L0

程序段Y

程序段N

LY: ……

…...

L0: …...

后继程序

slide25

分支结构

IF … THEN

TEST AX, 1

JZ LY

Y

N

LN:

条件

…...

程序段N

LY: ……

…...

后继程序段Y

slide26

循环结构

DO-UNTIL

WHILE-DO

slide27

循环控制:

计数控制 LOOP/...

条件控制 JZ/...

例:计算1+2+3+…+100

MOV AX, 0

MOV BX, 0

MOV CX, 64H

INC BX

ADD AX, BX

LOOP SUM

SUM:

slide28

例:从1开始累加奇数,直到和大于10000为止,统计被累加的整数个数例:从1开始累加奇数,直到和大于10000为止,统计被累加的整数个数

MOV AX, 1

MOV BX, 1

MOV CX, 1H

INC BX

INC BX

ADD AX, BX

INC CX

CMP AX,2710H

JLE SUM

HLT

SUM:

slide29

子程序设计

  • 过程定义

过程名 PROC [类型]

…… ;指令序列

RET ;过程返回指令

过程名 ENDP

类型:

NEAR——与主程序在同一个段

FAR ——可以与主程序不在同一个段

slide30

子程序设计

  • 过程调用
  • 近程调用
  • CALL 过程名
  • 将当前IP寄存器内容进栈(保存CALL下一条指令的偏移地址)
  • 将被调用过程的偏移地址送IP寄存器,控制程序转移到该过程
slide31

DATA SEGMENT

MESSAGE DB "Hello world!",0DH,0AH,"$"

DATA ENDS

SSEG SEGMENT STACK

DB 100 DUP(?)

SSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG,DS:DATA,SS:SSEG

START:

MOV AX, DATA

MOV DS, AX

CALL DISPLAY

MOV AH, 4CH;返回DOS

INT 21H

DISPLAY PROC

MOV DX, OFFSET MESSAGE

MOV AX, SEG MESSAGE

MOV DS, AX

MOV AH, 9 ;显示以“&”为结尾地字符串

INT 21H

RET

DISPLAY ENDP

CSEG ENDS

END START

slide32

过程调用

  • 远程调用
  • CALL FAR PTR 过程名
  • 将当前CS寄存器内容进栈(保存CALL下一条指令的段地址)
  • 将当前IP寄存器内容进栈(保存CALL下一条指令的偏移地址)
  • 将被调用过程的偏移地址送IP寄存器,段地址送CS寄存器,控制程序转移到该过程
slide33

DATA SEGMENT

MESSAGE DB "Hello world!",0DH,0AH,"$"

DATA ENDS

SSEG SEGMENT STACK

DB 100 DUP(?)

SSEG ENDS

CSEG SEGMENT

ASSUME CS:CSEG,DS:DATA,SS:SSEG

START:

MOV AX, DATA

MOV DS, AX

CALL FAR PTR DISPLAY

MOV AH, 4CH

INT 21H

DISPLAY PROC FAR

MOV DX, OFFSET MESSAGE

MOV AX, SEG MESSAGE

MOV DS, AX

MOV AH, 9

INT 21H

RET

DISPLAY ENDP

CSEG ENDS

END START

slide34

子程序设计

  • 返回指令

REP

REP n

实现返回功能,并调整SP,即

SP+n SP

slide35

例1:程序如下,完成什么功能:

DATA SEGMENT

D1 DW -123H ;补码为FEDDH

D2 DW -120H ;补码为FEE0H

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA ;说明代码段、数据段

BEGIN: MOV AX,DATA

MOV DS,AX ;给DS赋段值

MOV BX,D1

CMP BX,D2

JGE NEXT

MOV BX,D2

NEXT: MOV AH,4CH

INT 21H

CODE ENDS

END BEGIN

分析汇编语言程序

slide36

原始数据

一次比较

二次比较

三次比较

四次比较

3

7

6

10

5

3

7

6

5

10

3

10

7

6

5

10

3

7

6

5

3

7

10

6

5

例2:关于按大小的排序程序(发泡)

小数在前排序。两两比较,保证前一个数据比后一个数据小

N个数,第1轮要进行N-1次比较,最大的沉底;

剩余N-1个数,第2轮进行N-2次比较。

若比较伦次用(i)表示,该轮次的比较次数为(N-i)

第一轮

slide37

原始数据

一次比较

二次比较

三次比较

3

7

6

5

10

3

7

6

5

10

3

6

7

5

10

3

6

5

7

10

第二轮

一次比较

原始数据

一次比较

原始数据

二次比较

第三轮

3

6

5

7

10

3

5

6

7

10

3

5

6

7

10

第四轮

3

6

5

7

10

3

5

6

7

10

slide38

SUBP PROC ;完成(N-i)次比较

PUSH CX

MOV CX,N

SUB CX,DX ;本次比较次数(N-i )

MOV SI,0

RECMP: MOV AL,VAR[SI];取第1字节数到AL

CMP AL,VAR[SI+1]

JLE NOCH ;前小,不动

XCHG AL,VAR[SI +1 ] ;大,则互换

XCHG AL,VAR[SI]

NOCH: INC SI

LOOP RECMP ;CX←CX-1,

;若CX不等 于0则转

POP CX

RET

SUBP: ENDP

CSEG: ENDS

END B

程序如下:

D SEGMENT

VAR DB –1,-10,-100,27H,0AOH.47H

N EQU $-VAR

D ENDS

CSEG SEGMENT

ASSUME CS: CSEG,DS:D

B: MOV AX,D

MOV DS,AX ;给DS赋段值

MOV CX,N-1 ;每轮次比较次数

MOV DX,1 ;轮次 调用次数i

AG: CALL SUBP

INC DX

LOOP AG

MOV AH,4CH ;返回DOS

INT 21H

LOOP语句仅对CX计数器进行减一操作

程序中用DX代表比较轮次,该轮次的比较次数存于CX

子程序中成对使用PUSH和POP

slide39

程序如下:

D SEGMENT

VAR DB –1,-10,-100,27H,0AOH,47H

N EQU $-VAR;$当前位置,紧接在47H

D ENDS ;后面的那个位置

CSEG SEGMENT

ASSUME CS: CSEG,DS:DSEG

B: MOV AX,D

MOV DS,AX ;给DS赋段值

MOV CX,N-1 ;剩余轮次比较

MOV DX,1 ;正进行的轮次

AG: CALL SUBP ;两两比较子程序

INC DX

LOOP AG

MOV AH,4CH ;返回DOS

INT 21H

9CH

FFH

VAR:

VAR:

F6H

F6H

FFH

9CH

27H

27H

47H

A0H

47H

A0H

N:

N:

6H

6H

排序结果

slide40

SUBP: PROC;完成(N-i)次比较

PUSH CX ;保护主程序循环变量

MOV CX,N

SUB CX,DX ;本次比较次数(N-i)

MOV SI,0

RECMP: MOV AL,VAR[SI];取第1字节数到AL

CMP AL,VAR[SI+1]

JLE NOCH ;前数小,不动

XCHG AL,VAR[SI +1 ] ;大,则互换

XCHG AL,VAR[SI]

NOCH: INC SI

LOOP RECMP ;CX←CX-1,;若CX不等 于0则转

POP CX ;取出主程序循环变量

RET

SUBP: ENDP

CSEG: ENDS

END B

(SI)= -1,(SI+1)=-10(AL)= -1

第一次互换

(SI+1)= -1(AL)= -10

第二次互换

(SI)= -10(AL)= -1

AL保留最大数据,不破坏内容

slide41

例3:在横线处填上适当语句,试确定:SP的初始值_______,数据段的字节数为_________,当执行完CALL指令后,即将执行MOV时,请回答:AX内容为______,DX内容为______,说明程序的功能。例3:在横线处填上适当语句,试确定:SP的初始值_______,数据段的字节数为_________,当执行完CALL指令后,即将执行MOV时,请回答:AX内容为______,DX内容为______,说明程序的功能。

C8H

2

15H

6

KKK PROC FAR

XOR AX,AX

MOV DX, AX

INC DL

MOV CL,NUM

MOV CH, 0

BBB: ADD AL,DL

INC DL

LOOP BBB

MOV SUM, AL

KKK ENDP

CODE ENDS

END START

STACK SEGMENT

STAPN DW 100DUP(?)

STACK ENDS

DATA SEGMENT

NUM DB 06H

SUM DB ?

DATA ENDS

CODE SEGMENT

_________________________

START:MOV AX, DATA

MOV DS, AX

CALL_____________

MOV AH,4CH

INT 21H

说明:LOOP

第一次加法,CX=6;

CX=5,第二次加法,

CX=4→三次

CX=3→四次

CX=2→五次

CX=1→六次

CX=0→跳出

ASSUME DS:DATA,SS:STACK

KKK

slide42

例4:阅读程序,说明功能

[DS]:[0150H] 36H

37H

42H

48H

30H

ORG 100H

MOV CX,5

MOV DI,150H

BBB: MOV BL,0FFH

MOV AL,[DI]

CMP AL,3AH

JAE DONE

SUB AL,30H

JB DONE

MOV BL,AL

DONE:MOV AL,BL

MOV [DI+0AH],AL

INC DI

LOOP BBB

HLT

[DS]:[015AH] 6 _7

FFFF

0

slide43
作业:

自学:字符串输入(0AH),

P171

4.2,4.4,4.6