《-第4章 汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《-第4章 汇编语言程序设计.ppt(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第4章 汇编语言程序设计4.1 顺序程序设计4.2 分支程序设计4.3 循环程序设计4.4 子程序设计4.5 宏结构程序设计4.6 模块化程序设计4.7 输入输出程序设计顺序程序完全按指令书写的前后顺序执行每一条指令,是最基本、最常见的程序结构。4.1 顺序程序设计例4.1例4.2例例例例4.14.14.14.1.model small.stack 256.dataXdw 5Ydw 6Zdw 7Wdw?.code.startupmov ax,Xadd ax,Yadc ax,Zmov W,ax.exit 0end例例例例4.24.24.24.2qvar dq 1234567887654321hm
2、ov al,byte ptr qvar6mov byte ptr qvar7,almov al,byte ptr qvar5mov byte ptr qvar6,almov al,byte ptr qvar4mov byte ptr qvar5,almov al,byte ptr qvar3mov byte ptr qvar4,almov al,byte ptr qvar2mov byte ptr qvar3,almov al,byte ptr qvar1mov byte ptr qvar2,almov al,byte ptr qvar0mov byte ptr qvar1,almov byt
3、e ptr qvar0,012 34 56 78 87 65 43 21h34 56 78 87 65 43 21 00h移位后图示分支程序根据条件是真或假决定执行与否。判断的条件是各种指令,如CMP、TEST等执行后形成的状态标志。转移指令Jcc和JMP可以实现分支控制;还可以采用MASM 6.x提供的条件控制伪指令实现。4.2 分支程序设计单分支:例2.41双分支:例4.3多分支:例4.4例例例例2.412.412.412.41;计算XY的绝对值mov ax,Xsub ax,Yjns nonneg;条件满足(X-Y 0)?neg ax;条件不满足,求补nonneg:mov result,a
4、x;条件满足例例例例4.34.34.34.3mov al,_bimul almov bx,axmov al,_aimul _cmov cx,4imul cxcmp bx,ax;比较二者大小jge yes;条件满足?mov tag,0;第一分支体:条件不满足,tag0jmp done;跳过第二个分支体yes:mov tag,1;第二分支体:条件满足,tag1done:.exit 0前一个分支后要使用JMP指令,切切!or ah,ah;等效于cmp ah,0jz function0;ah=0,转向function0dec ah;等效于cmp ah,1jz function1;ah=1,转向func
5、tion1dec ah;等效于cmp ah,2jz function2;ah=2,转向function2.多分支结构多分支结构多分支结构多分支结构AH=0fuction0YNAH=1fuction1YNAH=2fuction2YNTabledb disp1,disp2,disp3,disp4,.例4.4 利用入口地址表,形成多分支地址表分支1地址分支2地址.数据段程序段分支体操作.datamsgdb Input number(18):,0dh,0ah,$msg1db Chapter 1:Fundamentals of Assembly Language,0dh,0ah,$msg2db Chap
6、ter 2:8086 Instruction Set,0dh,0ah,$msg3db Chapter 3:Statements of Assembly Language,0dh,0ah,$msg4db Chapter 4:Assembly Language Programming,0dh,0ah,$msg5db Chapter 5:32-bit Instructions and Programming,0dh,0ah,$msg6db Chapter 6:Mixed Programming with C/C+,0dh,0ah,$msg7db Chapter 7:FP Instructions a
7、nd Programming,0dh,0ah,$msg8db Chapter 8:MMX Instructions and Programming,0dh,0ah,$tabledw disp1,disp2,disp3,disp4,disp5,disp6,disp7,disp8;取得各个标号的偏移地址例4.4 数据段start1:mov dx,offset msg;提示输入数字mov ah,9int 21hmov ah,1;等待按键int 21hcmp al,1;数字 8?ja start1and ax,000fh;将ASCII码转换成数字dec axshl ax,1;等效于add ax,axm
8、ov bx,axjmp tablebx;(段内)间接转移:IPtable+bx例4.4 程序段start2:mov ah,9int 21h.exit 0;disp1:mov dx,offset msg1;处理程序1jmp start2disp2:mov dx,offset msg2;处理程序2jmp start2disp3:mov dx,offset msg3;处理程序3jmp start2disp4:mov dx,offset msg4;处理程序4jmp start2.例4.4 分支体循环结构一般是根据某一条件判断为真或假来确定是否重复执行循环体。循环指令和转移指令可以实现循环控制;还可以采
9、用MASM 6.x提供的循环控制伪指令实现。4.3 循环程序设计循环指令LOOPE:例4.6转移指令:例4.7多重循环:例4.8循环指令LOOP:例4.5.model small.stack 256.datasumdw?.code.startupxor ax,ax;被加数AX清0mov cx,100again:add ax,cx;从100,99,.,2,1倒序累加loop againmov sum,ax;将累加和送入指定单元.exit 0end例4.5 计算1100数字之和循环次数固定.startupmov ax,wordX;测试目标送AXmov cx,16;循环计数器置初值mov dl,-1
10、;计位器置初值again:inc dltest ax,1ror ax,1;循环指令不影响ZFloope again;CX0且ZF=1(测试位为0);继续循环je notfoundmov byteY,dljmp donenotfound:mov byteY,-1;ZF=1,测试目标的16个位均为0done:.exit 0例4.6 确定wordX中1的最低位数最大循环次数固定,满足条件退出。.startupmov bx,offset stringagain:mov al,bx;取一个字符or al,al;是否为结尾符0jz done;是,退出循环cmp al,A;是否为大写AZjb nextcmp
11、 al,Zja nextor al,20h;是,转换为小写字母(使D5=1)mov bx,al;仍保存在原位置next:inc bxjmp again;继续循环done:.exit 0例4.7 大写字母改为小写字母循环次数不定,利用标志退出。操作mov cx,count;CX数组元素个数dec cx;元素个数减1为外循环次数outlp:mov dx,cx;DX内循环次数mov bx,offset arrayinlp:mov al,bx;取前一个元素cmp al,bx+1;与后一个元素比较jna next;前一个不大于后一个元素,则不进行交换xchg al,bx+1;否则,进行交换mov bx,alnext:inc bx;下一对元素dec dxjnz inlp;内循环尾loop outlp;外循环尾例4.8 对数组元素排序:冒泡法双重循环,内循环含分支