汇编语言4最新版本

上传人:资****亨 文档编号:145481981 上传时间:2020-09-20 格式:PPT 页数:82 大小:1.12MB
返回 下载 相关 举报
汇编语言4最新版本_第1页
第1页 / 共82页
汇编语言4最新版本_第2页
第2页 / 共82页
汇编语言4最新版本_第3页
第3页 / 共82页
汇编语言4最新版本_第4页
第4页 / 共82页
汇编语言4最新版本_第5页
第5页 / 共82页
点击查看更多>>
资源描述

《汇编语言4最新版本》由会员分享,可在线阅读,更多相关《汇编语言4最新版本(82页珍藏版)》请在金锄头文库上搜索。

1、第 4 章,.,教学重点,综合应用第2章硬指令和第3章伪指令,第4章从程序结构角度展开程序设计,重点掌握: 分支结构程序设计 循环结构程序设计 子程序结构程序设计,.,4.1 顺序程序设计,顺序程序完全按指令书写的前后顺序执行每一条指令,是最基本、最常见的程序结构,例4.1 计算,例4.2 移位,例题 代码转换,例4.1,.model small .stack .data Xdw 5 Ydw 6 Zdw 7 Wdw ?,.code .startup mov ax,X add ax,Y add ax,Z mov W,ax .exit 0 end,例4.21/2,.data qvardq 1234

2、567887654321h .code mov al,byte ptr qvar6 mov byte ptr qvar7,al mov al,byte ptr qvar5 mov byte ptr qvar6,al mov al,byte ptr qvar4 mov byte ptr qvar5,al mov al,byte ptr qvar3 mov byte ptr qvar4,al,图示,例4.22/2,mov al,byte ptr qvar2 mov byte ptr qvar3,al mov al,byte ptr qvar1 mov byte ptr qvar2,al mov a

3、l,byte ptr qvar0 mov byte ptr qvar1,al mov byte ptr qvar0,0,12 34 56 78 87 65 43 21h,34 56 78 87 65 43 21 00h,移位后,图示,.,64位数据左移8位,12,34,56,78,87,65,43,21,00,qvar0,qvar1,qvar2,qvar3,qvar4,qvar5,qvar6,qvar7,例题 代码转换1/2,;查表法,实现一位16进制数转换为ASCII码显示 .model small .stack 256 .data ASCIIdb 30h,31h,32h,33h,34h,3

4、5h db 36h,37h,38h,39h;09的ASCII码 db 41h,42h,43h,44h,45h,46h ;AF的ASCII码 hexdb 0bh ;任意设定了一个待转换的一位16进制数,例题 代码转换2/2,.code .startup mov bx,offset ASCII;BX指向ASCII码表 mov al,hex ;AL取得一位16进制数,正是ASCII码表中位移 and al,0fh;只有低4位是有效的,高4位清0 xlat;换码:ALDS:BXAL mov dl,al;入口参数:DLAL mov ah,2;02号DOS功能调用 int 21h;显示一个ASCII码字符

5、 .exit 0 end,.,4.2 分支程序设计,分支程序根据条件是真或假决定执行与否 判断的条件是各种指令,如CMP、TEST等执行后形成的状态标志 转移指令Jcc和JMP可以实现分支控制;还可以采用MASM 6.x提供的条件控制伪指令实现,单分支:求绝对值等,双分支:例4.3等,多分支:例4.4等,单分支程序设计,条件成立跳转,否则顺序执行分支语句体;注意选择正确的条件转移指令和转移目标地址,例题 求绝对值,;计算AX的绝对值 cmp ax,0 jns nonneg;分支条件:AX0 neg ax;条件不满足,求补 nonneg:mov result,ax;条件满足 ;计算AX的绝对值

6、cmp ax,0 jl yesneg;分支条件:AX0 jmp nonneg yesneg:neg ax;条件不满足,求补 nonneg:mov result,ax;条件满足,Good,Bad,例题 无符号数除以2,;将AX中存放的无符号数除以2,如果是奇数,则加1后除以2 test ax,01h;测试AX最低位 jz even;最低位为0:AX为偶数 add ax,1 ;最低位为1:AX为奇数,需要加1 even:rcr ax,1;AXAX2 ;如果采用SHR指令,则不能处理AXFFFFH的特殊情况,双分支程序设计,条件成立跳转执行第2个分支语句体,否则顺序执行第1个分支语句体。注意第1个分

7、支体后一定要有一个JMP指令跳到第2个分支体后,例题 显示BX最高位,shl bx,1;BX最高位移入CF jc one;CF1,即最高位为1,转移 mov dl,0 ;CF0,即最高位为0,DL0 jmp two;一定要跳过另一个分支体 one:mov dl,1;DL1 two:mov ah,2 int 21h;显示,对比,双分支程序改为单分支程序,例题 显示BX最高位,shl bx,1;BX最高位移入CF jnc one;CF0,即最高位为0,转移 mov dl,1 ;CF1,即最高位为1,DL1 jmp two;一定要跳过另一个分支体 one:mov dl,0 ;DL0 two:mov

8、ah,2 int 21h;显示,双分支程序改为单分支程序,对比,例题 显示BX最高位,mov dl,0;DL0 shl bx,1;BX最高位移入CF jnc two;CF0,最高位为0,转移 mov dl,1;CF1,最高位为1,DL1 two:mov ah,2 int 21h;显示,编写分支程序,需留心分支的开始和结束,例4.3 判断有无实根1/2,.startup mov al,_b imul al mov bx,ax;BX中为b2 mov al,_a imul _c mov cx,4 imul cx;AX中为4ac(DX无有效数据),例4.3 判断有无实根2/2,cmp bx,ax;比较

9、二者大小 jge yes;条件满足? mov tag,0 ;第一分支体:条件不满足,tag0 jmp done;跳过第二个分支体 yes:mov tag,1 ;第二分支体:条件满足,tag1 done:.exit 0,;寄存器AL中是字母Y或y,则令AH0;否则令AH1 cmp al,Y;AL是大写Y否? jz next;是,转移 cmp al,y ;AL是小写y否? jz next;是,转移 mov ah,-1;不是Y或y,则AH1,结束 jmp done;一定要跳过另一个分支体 next:mov ah,0;是Y或y,则AH0,结束 done:.,例题 单分支和双分支,多分支程序设计,多个条

10、件对应各自的分支语句体,哪个条件成立就转入相应分支体执行。多分支可以化解为双分支或单分支结构的组合,例如: or ah,ah;等效于cmp ah,0 jz function0;ah0,转向function0 dec ah;等效于cmp ah,1 jz function1;ah1,转向function1 dec ah;等效于cmp ah,2 jz function2;ah2,转向function2,图示,.,多分支结构,.,地址表形成多分支,需要在数据段事先安排一个按顺序排列的转移地址表 输入的数字作为偏移量。因为只有2个字节16位偏移地址,所以偏移量需要乘2 关键是要理解间接寻址方式JMP指令

11、,.data msgdb Input number(18):,0dh,0ah,$ msg1db Chapter 1 : .,0dh,0ah,$ msg2db Chapter 2 : .,0dh,0ah,$ . msg8db Chapter 8 : . ,0dh,0ah,$ tabledw disp1,disp2,disp3,disp4 dw disp5,disp6,disp7,disp8 ;取得各个标号的偏移地址,例4.4 数据段1/3,start1:mov dx,offset msg;提示输入数字 mov ah,9 int 21h mov ah,1;等待按键 int 21h cmp al,1

12、;数字 8? ja start1 and ax,000fh;将ASCII码转换成数字,例4.4 代码段2/3,dec ax shl ax,1;等效于add ax,ax mov bx,ax jmp tablebx ;(段内)间接转移:IPtable+bx start2:mov ah,9 int 21h .exit 0 disp1:mov dx,offset msg1;处理程序1 jmp start2 .,例4.4 代码段3/3,.,4.3 循环程序设计,循环结构一般是根据某一条件判断为真或假来确定是否重复执行循环体 循环指令和转移指令可以实现循环控制;还可以采用MASM 6.x提供的循环控制伪指

13、令实现,循环指令LOOPE:例4.6,转移指令:例4.7,多重循环:例4.8等,循环指令LOOP:例4.5等,.,循环结构,.model small .stack .data sumdw ? .code .startup xor ax,ax;被加数AX清0 mov cx,100 again:add ax,cx ;从100,99,.,2,1倒序累加 loop again mov sum,ax;将累加和送入指定单元 .exit 0 end,例4.5 求和,计数控制循环 循环次数固定,;用二进制显示从键盘输入的一个字符的ASCII码 mov ah,1;从键盘输入一个字符 int 21h mov bl

14、,al;BLAL字符的ASCII码 ;DOS功能会改变AL内容,故字符ASCII码存入BL mov ah,2 mov dl,:;显示一个分号,用于分隔 int 21h,习题4.161/2,mov cx,8;CX8(循环次数) again:shl bl,1;左移进CF,从高位开始显示 mov dl,0;MOV指令不改变CF adc dl,30h;DL030HCF ;CF若是0,则DL0;若是1,则DL1 mov ah,2 int 21h;显示 loop again ;CX减1,如果CX未减至0,则循环,习题4.162/2,计数控制循环 循环次数固定,.startup mov ax,wordX;测

15、试目标送AX mov cx,16;循环计数器置初值 mov dl,-1;计位器置初值 again:inc dl test ax,1 ror ax,1;循环指令不影响ZF loope again ;CX0且ZF=1(测试位为0),继续循环 je notfound mov byteY,dl jmp done notfound:mov byteY,-1;ZF=1,16个位均为0 done:.exit 0,例4.6,计数控制循环 最大循环次数固定,满足条件退出,mov bx,offset string again:mov al,bx;取一个字符 or al,al;是否为结尾符0 jz done;是,退

16、出循环 cmp al,A;是否为大写AZ jb next cmp al,Z ja next or al,20h ;是,转换为小写字母(使D5=1) mov bx,al;仍保存在原位置 next:inc bx jmp again;继续循环 done:.exit 0,例4.7 大小写,条件控制循环 利用标志退出,.,冒泡法,“冒泡法”是一种排序算法,不是最优的算法,但它易于理解和实现 冒泡法从第一个元素开始,依次对相邻的两个元素进行比较,使前一个元素不大于后一个元素;将所有元素比较完之后,最大的元素排到了最后;然后,除掉最后一个元素之外的元素依上述方法再进行比较,得到次大的元素排在后面;如此重复,直至完成就实现元素从小到大的排序 这需要一个双重循环程序结构,图示,冒泡法的排序过程,mov cx,count;CX数组元素个数 dec cx;元素个数减1为外循环次数 outlp:mov dx,cx;DX内循环次数 mov bx,offset array inlp:mov al,bx;取前一个元素 cmp al,bx+1;与后一个元素比较 jna ne

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号