微机系统与接口课件:CH3_3第三章汇编语言程序设计(三)_第1页
微机系统与接口课件:CH3_3第三章汇编语言程序设计(三)_第2页
微机系统与接口课件:CH3_3第三章汇编语言程序设计(三)_第3页
微机系统与接口课件:CH3_3第三章汇编语言程序设计(三)_第4页
微机系统与接口课件:CH3_3第三章汇编语言程序设计(三)_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 第三章 汇编语言程序设计(三)Assembly Language Programming(3)格式# 伪指令# DOS/BIOS调用 (简单了解) 重点:数据结构表示 变量、指针 程序结构 程序流控制(条件、分支、循环) 程序设计方法-程序设计举例汇编语言程序举例(1)分块传送DATASEGMENTSTRGDB256 DUP(1,2,3)STG1EQU STRG+7STG2EQU STRG+27STRSEEQU 50;串长DATAENDSSSTACKSEGMENTSTACKDB256DUP(?)SSTACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DAT

2、AMAIN:.MOVAX,DATAMOVDS,AXMS-DOS程序程序举例(1)分块传送(续一) 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 MOVSBSTAG1STAG2STRSESTAG1+STRSE程序举例(1)分块传送(续二) MOV AX,4C00H ;返回

3、DOS,AH=4CH INT 21HCODE ENDS END MAIN 数据块传送:一般情况 P170程序举例(1)分块传送(通用子程序)通用子程序结构 功能=串移动ENTRY: DS:SI=源串首址 ES:DI=目标首址 CX=串长 -考虑物理地址关系 数据块传送:一般情况,P170BLKMOV PROC PUSH DS PUSH ES PUSH AX PUSH BXPUSH DXPUSH CX MOV AX,SIMOVCL,4SARAX,CL ;右移4位MOVDX,DSADD AX,DXMOVDS,AX ANDSI,0FH ;高位清零程序举例(1)分块传送(通用子程序)MOVBX,DIS

4、ARBX,CL ;右移4位MOVDX,ESADD BX,DXMOVES,BXANDDI,0FHCMP AX,BX(源和目标物理地址高16位);比较SRC/DST起始地址高位(比较源串和目标串的物理地址,先比较高16位,再比较低4位)JAMOVDOWN;从低往高JBMOVUPCMP SI,DI;高位相等,比低位JA MOVDOWNJBMOVUP程序举例(1)分块传送(通用子程序)POPCX ;相等,不移动 JMP MOVEXITMOVUP: STDPOP CXMOVAX,CXDEC AXADD SI,AXADD DI,AXJMPDOMOVMOVDOWN: CLDPOPCXDOMOV:REP MO

5、VSBMOVEXIT: POP . ; RETBLKMOV ENDP程序举例(1)分块传送(通用子程序)多重循环:例软件延时(nT,T=210ns)SOFTDLY PROC MOV BL,10 ; 4TDELAY0: MOV CX,2801; 4TDELAY1: LOOP DELAY1; 17T/5T DEC BL ;3T JNZ DELAY0 ;16T/4T RET ;20TSOFTDLY ENDPn=4+10*(4+2801*17-12)+3+16)-12 +20 -10ms内循环程序设计举例(2)循环软件延时DAINDEX DB 0; 波形发生DOTNUM DB DATIME-$-1DA

6、VALUE 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 BX,DOTNUMLEA SI,DAVALUE INC SI程序设计举例(三)查表波形发生MOV DAINDEX,0DALOOP: MOV AL, DAINDEX CMP AL, BX ;BX中为采样个数 JC DACYCLEXOR AL, AL MOV DAINDEX, AL; 复位计数DACYCLE: CALL DAOUT INC SI I

7、NC DAINDEX CALL DELAY CALL KBINPUT ;读键盘 CMP AL,1BH; ESC键按下,结束 JNZ DALOOPRET DACTRL ENDP程序设计举例(三)查表波形发生(续一)DAOUT PROC;查表输出 LEA SI,DAVLUE XOR AH,AH ; AL= DAINDEX ADD SI,AX MOV AL,SI MOV DX, DAPORT; DAC端口 OUT DX,AL RETDAOUT ENDP程序设计举例(三)查表波形发生(续二) 程序设计举例四模块化:过程/子程序调用与参数传递术语嵌套递归参数传递、寄存器、数据单元变量(内存,含指针变量)

8、(全局)、堆栈汇编语言程序设计结构过程(子程序,函数, 方法)参数传递寄存器传递;内存单元(全局)传递;速度快,但结构差,难维护MOV SI, OFFSET SBuf_head MOV DI, OFFSET Dbuf_head MOV CX,COUNT CALL BLKCHEK堆栈传递-POP取/BP取(子RET n)舍弃的字节数n一般是调用前通过堆栈向过程传递的参数程序设计举例过程调用与参数传递START: MOV AX,DATA MOV DS, AX LEA BX,ARRAY PUSH BX LEA BX,COUNT PUSH BX LEA BX,SUM PUSH BXCALL PRO_A

9、DD :OFFSET ARRAYOFFSET COUNTOFFSET SUM 断点CS 断点IP调用后SP运行前SP堆栈段+8PRO_ADD PROC FAR PUSH AX PUSH BX PUSH CX PUSH BP MOV BP, SP MOV BX, BP+14;MOV CX, BX ;count MOV SI,BP+16; OFFSET ARRAY指针MOV BX,BP+12;SUM指针MOV AX,0 断点AX 断点CX 断点BX 断点BP +8程序设计举例过程调用与参数传递(续)LP: ADD AX,SI INC SI INC SI LOOP LP MOV BX, AX POP

10、 BP POP CX POP BX POP AX RET 6 断点AX 断点CX 断点BX 断点BP +8程序设计举例过程调用与参数传递(续) 过程/子程序模块化:调用与参数传递计算!(N=8 WORD; N=2 ? 过程/子程序调用-递归计算!(N=8 WORD; N12如何处理MOV AX, N ;计算 CALL PCALC MOV RESULT,AX RETRESULT DW ?课外选做:观察堆栈变化数据流和程序流 递归调用(续)PCALC:CMP AX,1 ;递归函数JNZ PCALC1 ; N=1, 结束RETPCALC1:PUSH AXDEC AX CALL PCALC ;递归调用POP BX MUL BX RET程序1 hello.c #include int main()printf(Hello, worldn);return 0;TCC -B -ms -Iinclude -Llib hello.c C语言函数 Hello World 与系统调用DATASEGMENTszHelloDBHello,World!,0dh,0ah,$DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATASTART

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论