第 4 章 汇编语言程序设计 ( 三)

28
微微微 微微微微微 东东东东 1 东4东 东东东东东东东东 ( 东Assembly Language Programming(3) 东东 # 东东东 # DOS/BIOS 东东 ( 东东东东东东东东东东东东 东东 东东 东东东东 东东东东东 东东东 东东东 东东东 (、、) 东东东东东东 ----- 东东东东东东

description

Assembly Language Programming(3). 格式 # 伪指令 # ╳ DOS/BIOS 调用 ( 简单了解) 重点: 数据结构表示 变量、指针 程序结构 程序流控制(条件、分支、循环) 程序设计方法 ----- 程序设计举例. 第 4 章 汇编语言程序设计 ( 三). 汇编语言程序举例( 1 )分块传送. DATASEGMENT STRGDB256 DUP(1,2,3) STG1EQU STRG+7 STG2EQU STRG+27 - PowerPoint PPT Presentation

Transcript of 第 4 章 汇编语言程序设计 ( 三)

Page 1: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 1

第 4章 汇编语言程序设计(三)

Assembly Language Programming(3)

• 格式 #

• 伪指令 #

• ╳ DOS/BIOS 调用 ( 简单了解)

重点:数据结构表示 变量、指针

程序结构

程序流控制(条件、分支、循环)

程序设计方法 ----- 程序设计举例

Page 2: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 2

汇编语言程序举例( 1 )分块传送

DATA SEGMENTSTRG DB 256 DUP(1,2,3)STG1 EQU STRG+7STG2 EQU STRG+27STRSE EQU 50 ; 串长DATA ENDSSSTACK SEGMENT STACK

DB 256 DUP(?)SSTACK ENDSCODE SEGMENTASSUME CS : CODE , DS : DATA , ES :

DATAMAIN: ….

MOV AX,DATAMOV DS,AX

MS-DOS 程序

Page 3: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 3

MOV ES,AXMOV CX,STRSE;MOV SI,OFFSET STG1; 源串首址MOV DI,OFFSET STG2 ;目标首址CLD ;增量方式PUSH SI

ADD SI,STRSE-1 ; SI= 源串末址 CMP SI,DI

POP SI JL OK ;不重叠

STD ;重叠,按减量 ADD SI,STRSE-1 ; 指向串末 ADD DI,STRSE-1

OK: REP MOVSB

程序举例( 1 )分块传送 ( 续一)

STAG1

STAG2

STRSESTAG1+STRSE

Page 4: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 4

程序举例( 1 )分块传送 ( 续二) ………

MOV AX,4C00H ; 返回 DOS INT 21H

CODE ENDS END MAIN

数据块传送:一般情况 P204

Page 5: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 5

程序举例( 1 )分块传送 ( 通用子程序)

通用子程序结构 功能 = 串移动

ENTRY: DS:SI= 源串首址 ES:DI= 目标首址 CX= 串长

--> 考虑物理地址关系

数据块传送:一般情况

Page 6: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 6

BLKMOV PROC PUSH DS PUSH ES PUSH   AX PUSH BX

PUSH DXPUSH CX

MOV AX,SIMOV CL,4SAR AX,CL ;右移 4 位MOV DX,DSADD AX,DSMOV DS,AX

AND SI,0FH

程序举例( 1 )分块传送 ( 通用子程序)

Page 7: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 7

MOV BX,DISAR BX,CL ; 右移 4 位MOV DX,ESADD BX,DXMOV ES,BXAND DI,0FHCMP AX,BX

;比较 SRC/DST 起始地址高16位JA MOVDOWN; 从低往高JB MOVUPCMP SI,DI ;高16位相等,比低4位JA MOVUPJB MOVDOWN

程序举例( 1 )分块传送 ( 通用子程序)

Page 8: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 8

POP CX ; 相等,不移动   JMP MOVEXITMOVUP: STD

POP CXMOV AX,CXDEC AXADD SI,AXADD DI,AXJMP DOMOV

MOVDOWN: CLDPOP CX

DOMOV: REP MOVSBMOVEXIT: POP ……. ;? 子程序保护

RETBLKMOV ENDP

程序举例( 1 )分块传送 ( 通用子程序)

Page 9: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 9

多重循环:例—软件延时 (nT,T=210ns )SOFTDLY PROC

MOV BL,10 ; 4T

DELAY0: MOV CX,2801; 4T

DELAY1: LOOP DELAY1; 17T/5T

DEC BL ;3T

JNZ DELAY ;16T/4T

RET ;20T

SOFTDLY ENDP

n=4+10*(4+2801*17-12)+3+16)-12 +20 -->10ms

内循环

程序设计举例( 2 )循环软件延时

Page 10: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 10

DAINDEX DB 0;? 波形发生DOTNUM DB DATIME-$-1DAVALUE DB 0,40H,80H,0C0H DB 255,0C0H,80H,40H; 三角波DATIME DW 100DACTRL PROC FAR PUSH DS

PUSH 0000 MOV AX,SEG DAVALUE MOV DS,AX

MOV CL,DOTNUMLEA SI,DAVALUE

INC SI

程序设计举例(三)查表波形发生

Page 11: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 11

MOV DAINDEX,0DALOOP: MOV AL, DAINDEX CMP AL, DOTNUM JC DACYCLE

XOR AL, AL MOV DAINDEX, AL; 复位计数DACYCLE: CALL DAOUT INC SI INC DAINDEX CALL DELAY CALL KBINPUT ;读键盘 CMP AL,1BH; ESC 键按下,结束 JNZ DALOOP

RET DACTRL ENDP

程序设计举例(三)查表波形发生 ( 续一 )

Page 12: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 12

DAOUT PROC; 查表输出 LEA SI,DAVLUE

XOR AH,AH

ADD SI,AX

MOV AL,[SI]

MOV DX, DAPORT ; DAC 端口 OUT DX,AL

RET

DAOUT ENDP

程序设计举例(三)查表波形发生 ( 续二 )

Page 13: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 13

程序设计举例—模块化:过程 / 子程序调用与参数传递

术语 嵌套 递归 可重入 可重定位参数传递1、寄存器2、数据单元变量(内存,含指针变量)(全局)3、堆栈

Page 14: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 14

程序设计举例—过程调用与参数传递START: MOV AX,DATA

MOV DS, AX

LEA BX,ARRAY

PUSH BX

LEA BX,COUNT

PUSH BX

LEA BX,SUM

PUSH BX

CALL PRO_ADD

: ;ADD SP,6

OFFSET ARRAY

OFFSET COUNT

OFFSET SUM

断点 CS

断点 IP调用后 SP

运行前 SP

堆栈段

+8

Page 15: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 15

PRO_ADD PROC FAR

PUSH AX

PUSH BX

PUSH CX

PUSH BP

MOV BP, SP

MOV BX, [BP+14];

   MOV CX, [BX] ; count

MOV BX,[BP+12];   SUM 指针   MOV BX,[BP+16]

MOV AX,0   

断点 AX

断点 CX

断点 BX

断点 BP

+8

程序设计举例—过程调用与参数传递(续)

Page 16: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 16

LP: ADD AX,[SI]

INC SI

INC SI

LOOP LP

MOV [BX], AX

POP BP

POP CX

POP BX

POP AX

RET 6   

断点 AX

断点 CX

断点 BX

断点 BP

+8

程序设计举例—过程调用与参数传递(续)

Page 17: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 17

#include <stdio.h> /* 程序 2 */int T_calc(int,int);int main(){int a=20,b=100,c; T_calc(a,b);

return 0;}int T_calc(int a,int b){ int c;c=a+b;return c;}

TCC –B –ms –Iinclude -Llib myprog.c

C 语言函数(课外作业选做:观察汇编程序)

Page 18: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 18

过程 / 子程序—模块化:调用与参数传递计算N!( N<=8 WORD; N<=12 DWORD ); MOV AX, N ; 计算 MOV CX, AX

DEC CX

LP: MUL CX

LOOP CX

MOV RESULT,AX

RESULT DW ?

循环方式

Page 19: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 19

过程 / 子程序调用 -- 递归计算N!( N<=8 WORD; N<=12 DWORD );思考 : 如 N>12 如何处理

MOV AX, N ; 计算 CALL PCALC

MOV RESULT,AX

RET

RESULT DW ?

课外选做:观察堆栈变化—数据流和程序流

Page 20: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 20

递归调用( 续 )

PCALC: CMP AX,1 ; 递归函数JNZ PCALC1

RET

PCALC1: PUSH AX

DEC AX

CALL PCALC ;递归调用POP BX

MUL BX

RET

Page 21: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 21

实验:汇编 .ASM-->.OBJ-->.EXE

单模块程序工具: EDIT.EXE MASM.EXE LINK.EXE

编辑器 汇编器 链接器D:>MASM myprog; -->myprog.OBJ

D:>LINK myprog; -->myprog.EXE

多模块程序D:>MASM myprog1; -->myprog1.OBJ

D:>MASM myprog2; -->myprog2.OBJ

D:>LINK myprog1+myprog2+xxx.lib;

-->myprog1.EXE

Page 22: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 22

程序 1 hello.c

#include <stdio.h>

 

int main()

{

printf("Hello, world\n");

return 0;

}

TCC -B -ms -Iinclude -Llib hello.c

C 语言函数(课外作业选做:观察汇编程序)

Page 23: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 23

‘Hello World’ 与系统调用DATA SEGMENTszHello DB ‘Hello,World!’,0dh,0ah,’$’DATA ENDSCODE SEGMENTASSUME CS : CODE , DS : DATA , ES : DAT

ASTART: MOV AX,DATA

MOV DS,AXMOV AH,9MOV DX,OFFSET szHelloINT 21HMOV AH,4CHINT 21H

CODE ENDSEND START

用户堆栈SSTACK SEGMENT STACK

DB 256 DUP(?)SSTACK ENDS

Page 24: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 24

汇编程序输入输出 BIOS/BDOS(P174-204)

概念和使用DOS 和 BIOS 调用  (Disk OS---Basic I&O system)

 两组系统服务程序 OS 与 MS-DOS, MS-DOS OS: 处理机 / 存储 / 文

件 / 设备 / 作业管理 --- 资源管理硬件裸机: BIOS-DOS- 高级语言。硬件控制:直接

IO-BIOS-DOS- 高级语言。移植性:直接 IO 《 BIOS 《 DOS 《高级语言。关键: DOS 与设备无关 ----BIOS 与设备相关应用 : 系统功能调用 ---

软中断 PC—MS-DOS---BIOS INT XXH

Page 25: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 25

汇编程序输入输出 BIOS/BDOS(P180)

. 系统功能86PC:4 种中断: NMI, INTR, 内部中断、软中断向量中断技术 0-3FFH 中断向量表0~255 中断号对应中断例程入口 INT n

INT 10H~1FH ROM-BIOS

I/O 控制程序 物理地址 0F000 起始INT 20~3FH DOS 中断INT 40H~FFH 自由中断区P449-458附录 3.2 和 3.3

Page 26: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 26

汇编程序输入输出 BIOS/BDOS(P178)

读键盘(阻塞) (非阻塞)MOV AH,1 KBSCAN: MOV AH, 0BH

INT 21H INT 21H

CMP AL,’Y’ CMP AL,0FFH

JZ KBINPUT

;其他例行处理操作 ;

JMP KBSCAN

KBINPUT:MOV AH,1

  BOIS 调用:MOV AH,0 MOV AH,1

INT 16H INT 16H

Page 27: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 27

汇编程序输入输出 BIOS/BDOS 显示字符: (DOS仅字符方式 ) MOV AH,2 MOV DL,’A’ ; 07 Bell INT 21H; ^C 可退出特点: (MS-DOS)(1) 不用 CALL(2) 软中断 INT n (3) 用户程序不必与服务程序代码相连==>向量(同一般 OS: 代码简洁、可读性好,调试、使用方便)==》基础 CP/M-DOS /BIOS ,。(4)BIOS-ROM固化。

Page 28: 第 4 章  汇编语言程序设计 ( 三)

微机系统与接口技术 东南大学 28

汇编程序输入输出 BIOS/BDOS

1. 发展 (1.06.22+,4.0 后为多任务) /IBM –PCDOS 2 局限性 (80x86实模式 ,640K/1M) 3. 系统层次 DOS引导块 ; DOS 自身模块 (3个文件 ); DOS外部命令块 (.COM/EXE/.SYS); PC 用户系统层次结构 : 应用层 /DOS 服务层 /ROM-BIOS 服务层 / 硬件控制层 -- 接口技术 外部( SHELL )命令行— COMMAND.COM // 内部控制: INT n 调用 ==》系统资源管理使用。4. 内存映像 中断向量 /DOS 设备驱动 /DOS 内核 / 系统配置/DOS-SHELL常驻 / 用户程序 5. 不可重入 DOS Kernal :3个堆栈区 :Ker_Stk1错误处理与字符设备处理 ; Ker_Stk2正常处理文件与服务 ;Ker_Stk3正常处理字符设备服务 ; 6. 系统资源 系统堆栈 (3) 、系统链指针块、(系统扇区缓冲区链、系统句柄文件控制块链、 PSP 链。 第 4章