《【教学课件】第4章汇编语言程序设计(三).ppt》由会员分享,可在线阅读,更多相关《【教学课件】第4章汇编语言程序设计(三).ppt(28页珍藏版)》请在三一办公上搜索。
1、第4章 汇编语言程序设计(三),Assembly Language Programming(3),格式#伪指令#DOS/BIOS调用(简单了解)重点:数据结构表示 变量、指针 程序结构 程序流控制(条件、分支、循环)程序设计方法-程序设计举例,汇编语言程序举例(1)分块传送,DATASEGMENTSTRGDB256 DUP(1,2,3)STG1EQU STRG+7STG2EQU STRG+27STRSEEQU 50;串长DATAENDSSSTACKSEGMENTSTACKDB256DUP(?)SSTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATAM
2、AIN:.MOVAX,DATAMOVDS,AX,MS-DOS程序,MOVES,AXMOVCX,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-1OK:REP MOVSB,程序举例(1)分块传送(续一),STAG1,STAG2,STRSE,STAG1+STRSE,程序举例(1)分块传送(续二),MOV AX,4C00H;返回
3、DOS INT 21HCODE ENDS END MAIN,数据块传送:一般情况 P204,程序举例(1)分块传送(通用子程序),通用子程序结构 功能=串移动ENTRY:DS:SI=源串首址 ES:DI=目标首址 CX=串长-考虑物理地址关系,数据块传送:一般情况,BLKMOV PROC PUSH DS PUSH ES PUSH AX PUSH BXPUSH DXPUSH CX MOV AX,SIMOVCL,4SARAX,CL;右移4位MOVDX,DSADD AX,DSMOVDS,AX ANDSI,0FH,程序举例(1)分块传送(通用子程序),MOVBX,DISARBX,CL;右移4位MOVD
4、X,ESADD BX,DXMOVES,BXANDDI,0FHCMP AX,BX;比较SRC/DST起始地址高位JAMOVDOWN;从低往高JBMOVUPCMP SI,DI;高位相等,比低位JA MOVUPJBMOVDOWN,程序举例(1)分块传送(通用子程序),POPCX;相等,不移动 JMP MOVEXITMOVUP:STDPOP CXMOVAX,CXDEC AXADD SI,AXADD DI,AXJMPDOMOVMOVDOWN:CLDPOPCXDOMOV:REP MOVSBMOVEXIT:POP.;?子程序保护RETBLKMOV ENDP,程序举例(1)分块传送(通用子程序),多重循环:例
5、软件延时(nT,T=210ns)SOFTDLY PROC MOV BL,10;4TDELAY0:MOV CX,2801;4TDELAY1:LOOP DELAY1;17T/5T DEC BL;3T JNZ DELAY;16T/4T RET;20TSOFTDLY ENDPn=4+10*(4+2801*17-12)+3+16)-12+20-10ms,内循环,程序设计举例(2)循环软件延时,DAINDEX DB 0;?波形发生DOTNUM DB DATIME-$-1DAVALUE DB 0,40H,80H,0C0H DB 255,0C0H,80H,40H;三角波DATIME DW 100DACTRL
6、PROC FAR PUSH DS PUSH 0000 MOV AX,SEG DAVALUE MOV DS,AX MOV CL,DOTNUMLEA SI,DAVALUE INC SI,程序设计举例(三)查表波形发生,MOV DAINDEX,0DALOOP:MOV AL,DAINDEX CMP AL,DOTNUM JC DACYCLEXOR AL,AL MOV DAINDEX,AL;复位计数DACYCLE:CALL DAOUT INC SI INC DAINDEX CALL DELAY CALL KBINPUT;读键盘 CMP AL,1BH;ESC键按下,结束 JNZ DALOOPRET DACT
7、RL ENDP,程序设计举例(三)查表波形发生(续一),DAOUT PROC;查表输出 LEA SI,DAVLUE XOR AH,AH ADD SI,AX MOV AL,SI MOV DX,DAPORT;DAC端口 OUT DX,AL RETDAOUT ENDP,程序设计举例(三)查表波形发生(续二),程序设计举例模块化:过程/子程序调用与参数传递,术语嵌套递归可重入可重定位参数传递、寄存器、数据单元变量(内存,含指针变量)(全局)、堆栈,程序设计举例过程调用与参数传递,START:MOV AX,DATA MOV DS,AX LEA BX,ARRAY PUSH BX LEA BX,COUNT
8、PUSH BX LEA BX,SUM PUSH BXCALL PRO_ADD:;ADD SP,6,OFFSET ARRAY,OFFSET COUNT,OFFSET SUM,断点CS,断点IP,调用后SP,运行前SP,堆栈段,+8,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,程序设计举例过程调用与参数传递(续),LP:ADD AX,SI IN
9、C SI INC SI LOOP LP MOV BX,AX POP BP POP CX POP BX POP AX RET 6,断点AX,断点CX,断点BX,断点BP,+8,程序设计举例过程调用与参数传递(续),#include/*程序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语言函数(课外作业选做:观察汇编程序),过程/子程序模块化:调用与参
10、数传递,计算!(N=8 WORD;N=12 DWORD);MOV AX,N;计算 MOV CX,AX DEC CXLP:MUL CX LOOP CX MOV RESULT,AXRESULT DW?循环方式,过程/子程序调用-递归,计算!(N12如何处理MOV AX,N;计算 CALL PCALC MOV RESULT,AX RETRESULT DW?课外选做:观察堆栈变化数据流和程序流,递归调用(续),PCALC:CMP AX,1;递归函数JNZ PCALC1RETPCALC1:PUSH AXDEC AXCALL PCALC;递归调用POP BXMUL BXRET,实验:汇编.ASM-.OBJ
11、-.EXE,单模块程序工具:EDIT.EXE MASM.EXE LINK.EXE 编辑器 汇编器 链接器D:MASM myprog;-myprog.OBJD:LINK myprog;-myprog.EXE多模块程序D:MASM myprog1;-myprog1.OBJD:MASM myprog2;-myprog2.OBJD:LINK myprog1+myprog2+xxx.lib;-myprog1.EXE,程序1 hello.c#include int main()printf(Hello,worldn);return 0;TCC-B-ms-Iinclude-Llib hello.c,C语言函
12、数(课外作业选做:观察汇编程序),Hello World 与系统调用,DATASEGMENTszHelloDBHello,World!,0dh,0ah,$DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATASTART:MOV AX,DATAMOVDS,AXMOV AH,9MOVDX,OFFSET szHelloINT 21HMOV AH,4CHINT 21HCODEENDSEND START,用户堆栈SSTACK SEGMENTSTACKDB256DUP(?)SSTACK ENDS,汇编程序输入输出BIOS/BDOS(P174-204),概念和使用D
13、OS和BIOS调用(Disk OS-Basic I&O system)两组系统服务程序 OS与MS-DOS,MS-DOS OS:处理机/存储/文件/设备/作业管理-资源管理硬件裸机:BIOS-DOS-高级语言。硬件控制:直接IO-BIOS-DOS-高级语言。移植性:直接IOBIOSDOS 高级语言。关键:DOS与设备无关-BIOS与设备相关应用:系统功能调用-软中断 PCMS-DOS-BIOS INT XXH,汇编程序输入输出BIOS/BDOS(P180),.系统功能86PC:4种中断:NMI,INTR,内部中断、软中断向量中断技术 0-3FFH 中断向量表0255中断号对应中断例程入口 IN
14、T n INT 10H1FH ROM-BIOS I/O控制程序 物理地址0F000起始INT 203FH DOS中断INT 40HFFH自由中断区P449-458附录3.2和3.3,汇编程序输入输出BIOS/BDOS(P178),读键盘(阻塞)(非阻塞)MOV AH,1 KBSCAN:MOV AH,0BH INT 21H INT 21HCMP AL,Y CMP AL,0FFH JZ KBINPUT;其他例行处理操作;JMP KBSCAN KBINPUT:MOV AH,1 BOIS调用:MOV AH,0 MOV AH,1 INT 16H INT 16H,汇编程序输入输出BIOS/BDOS,显示字
15、符:(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固化。,汇编程序输入输出BIOS/BDOS,1.发展(1.06.22+,4.0后为多任务)/IBM PCDOS 2 局限性(80 x86实模式,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章,