1 / 28

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

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

lyris
Download Presentation

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

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Assembly Language Programming(3) 格式# 伪指令# ╳DOS/BIOS调用 (简单了解) 重点:数据结构表示 变量、指针 程序结构 程序流控制(条件、分支、循环) 程序设计方法-----程序设计举例 第4章 汇编语言程序设计(三)

  2. 汇编语言程序举例(1)分块传送 DATA SEGMENT STRG DB 256 DUP(1,2,3) STG1 EQU STRG+7 STG2 EQU STRG+27 STRSE EQU 50 ;串长 DATA ENDS SSTACK SEGMENT STACK DB 256 DUP(?) SSTACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA MAIN: …. MOV AX,DATA MOV DS,AX MS-DOS程序

  3. 程序举例(1)分块传送(续一) MOV ES,AX MOV 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 STAG1 STRSE STAG1+STRSE STAG2

  4. 程序举例(1)分块传送(续二) ……… MOV AX,4C00H ;返回DOS INT 21H CODE ENDS END MAIN 数据块传送:一般情况 P204

  5. 程序举例(1)分块传送(通用子程序) 通用子程序结构功能=串移动 ENTRY: DS:SI=源串首址 ES:DI=目标首址 CX=串长 -->考虑物理地址关系 数据块传送:一般情况

  6. 程序举例(1)分块传送(通用子程序) BLKMOV PROC PUSH DS PUSH ES PUSHAX PUSH BX PUSH DX PUSH CX MOV AX,SI MOV CL,4 SAR AX,CL ;右移4位 MOV DX,DS ADD AX,DS MOV DS,AX AND SI,0FH

  7. 程序举例(1)分块传送(通用子程序) MOV BX,DI SAR BX,CL ;右移4位 MOV DX,ES ADD BX,DX MOV ES,BX AND DI,0FH CMP AX,BX ;比较SRC/DST起始地址高16位 JA MOVDOWN;从低往高 JB MOVUP CMP SI,DI;高16位相等,比低4位 JA MOVUP JB MOVDOWN

  8. 程序举例(1)分块传送(通用子程序) POP CX ;相等,不移动 JMP MOVEXIT MOVUP: STD POP CX MOV AX,CX DEC AX ADD SI,AX ADD DI,AX JMP DOMOV MOVDOWN: CLD POP CX DOMOV: REP MOVSB MOVEXIT: POP ……. ;?子程序保护 RET BLKMOV ENDP

  9. 程序设计举例(2)循环软件延时 多重循环:例—软件延时(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 内循环

  10. 程序设计举例(三)查表波形发生 DAINDEX DB 0;? 波形发生 DOTNUM DB DATIME-$-1 DAVALUE DB 0,40H,80H,0C0H DB 255,0C0H,80H,40H;三角波 DATIME DW 100 DACTRL PROC FAR PUSH DS PUSH 0000 MOV AX,SEG DAVALUE MOV DS,AX MOV CL,DOTNUM LEA SI,DAVALUE INC SI

  11. 程序设计举例(三)查表波形发生(续一) MOV DAINDEX,0 DALOOP: 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

  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

  13. 程序设计举例—模块化: 过程/子程序调用与参数传递 术语  嵌套 递归 可重入 可重定位 参数传递 1、寄存器 2、数据单元变量(内存,含指针变量)(全局) 3、堆栈

  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 堆栈段 调用后SP 断点IP 断点CS OFFSET SUM OFFSET COUNT +8 OFFSET ARRAY 运行前SP

  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 断点BP 断点CX 断点BX 断点AX +8

  16. 程序设计举例—过程调用与参数传递(续) LP: ADD AX,[SI] INC SI INC SI LOOP LP MOV [BX], AX POP BP POP CX POP BX POP AX RET 6 断点BP 断点CX 断点BX 断点AX +8

  17. C语言函数(课外作业选做:观察汇编程序) #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

  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 ? 循环方式

  19. 过程/子程序调用--递归 计算N!(N<=8 WORD; N<=12 DWORD); 思考: 如N>12如何处理 MOV AX, N ;计算 CALL PCALC MOV RESULT,AX RET RESULT DW ? 课外选做:观察堆栈变化—数据流和程序流

  20. 递归调用(续) PCALC: CMP AX,1 ;递归函数 JNZ PCALC1 RET PCALC1: PUSH AX DEC AX CALL PCALC ;递归调用 POP BX MUL BX RET

  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

  22. C语言函数(课外作业选做:观察汇编程序) 程序1 hello.c #include <stdio.h> int main() { printf("Hello, world\n"); return 0; } TCC -B -ms -Iinclude -Llib hello.c

  23. ‘Hello World’ 与系统调用 DATA SEGMENT szHello DB ‘Hello,World!’,0dh,0ah,’$’ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV AH,9 MOV DX,OFFSET szHello INT 21H MOV AH,4CH INT 21H CODE ENDS END START 用户堆栈 SSTACK SEGMENT STACK DB 256 DUP(?) SSTACK ENDS

  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

  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

  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

  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固化。

  28. 汇编程序输入输出BIOS/BDOS 1. 发展(1.06.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章

More Related