第11~12讲 第4章 汇编语言程序设计(2-3)

上传人:豆浆 文档编号:5955219 上传时间:2017-08-07 格式:PPT 页数:48 大小:916KB
返回 下载 相关 举报
第11~12讲 第4章  汇编语言程序设计(2-3)_第1页
第1页 / 共48页
第11~12讲 第4章  汇编语言程序设计(2-3)_第2页
第2页 / 共48页
第11~12讲 第4章  汇编语言程序设计(2-3)_第3页
第3页 / 共48页
第11~12讲 第4章  汇编语言程序设计(2-3)_第4页
第4页 / 共48页
第11~12讲 第4章  汇编语言程序设计(2-3)_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《第11~12讲 第4章 汇编语言程序设计(2-3)》由会员分享,可在线阅读,更多相关《第11~12讲 第4章 汇编语言程序设计(2-3)(48页珍藏版)》请在金锄头文库上搜索。

1、第 4 章,通过本章的学习,应当掌握以下内容:了解汇编语言的基本知识和特点。熟悉汇编语言的程序结构、段定义以及语句的格式。掌握汇编语言常用伪指令的使用方法。熟练掌握汇编语言程序设计的基本方法:顺序结构、 分支结构、循环结构和子程序结构。*掌握程序设计中的宏指令和常用的系统功能的调用方法。,是否掌握?,教学目的,综合硬指令和伪指令,从程序结构角度展开程序设计,:分支结构程序设计循环结构程序设计子程序结构程序设计,教学重点,1. 掌握基本程序结构顺序结构、循环结构、分支结构及其汇编语言程序设计2. 熟悉常见程序设计问题:数据范围判断(09、AZ、az)字母大小写转换;字符串传送、比较等操作求最大最

2、小值、数据求和、统计字符个数数组排序,查找,插入,删除,(3)分支结构 (4) 子程序结构, 程序结构,(5)复合结构:多种程序结构的组合,(1) 顺序结构 (2) 循环结构, 编制汇编语言程序的步骤,(1) 分析题意,确定算法根据算法画出程序框图(3)分配存储空间及工作单元根据框图编写程序(5)上机调试程序,4.3 顺序程序设计,顺序程序完全按指令书写的前后顺序执行每一条指令,是最基本、最常见的程序结构一般纯粹的顺序结构的程序设计较少,例4.1 计算,例4.2 移位,例题 代码转换,例4.1,.model small.stack.dataXdw 5Ydw 6Zdw 7Wdw ?,.code.

3、startupmov ax,Xadd ax,Yadd ax,Zmov W,ax.exit 0end,64位数据左移8位 例4.21/2,.dataqvardq 1234567887654321h.codemov 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,al,图示,3456788765432100,例4.22/2,m

4、ov al,byte ptr qvar2mov byte ptr qvar3,almov al,byte ptr qvar1mov byte ptr qvar2,almov al,byte ptr qvar0mov byte ptr qvar1,almov 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,;

5、查表法,实现一位16进制数转换为ASCII码显示.model small.stack.dataASCIIdb 30h,31h,32h,33h,34h,35hdb 36h,37h,38h,39h;09的ASCII码db 41h,42h,43h,44h,45h,46h;AF的ASCII码hexdb 0bh;任意设定了一个待转换的一位16进制数,例题 代码转换2/2,.code.startupmov bx,offset ASCII;BX指向ASCII码表mov al,hex;AL取得一位16进制数,正是ASCII码表中位移and al,0fh;只有低4位是有效的,高4位清0xlat;换码:ALDS:

6、BXALmov dl,al;入口参数:DLALmov ah,2;02号DOS功能调用int 21h;显示一个ASCII码字符.exit 0end,4.4 分支程序设计,分支程序根据条件是真或假决定执行与否判断的条件是各种指令,如CMP、TEST等执行后形成的状态标志转移指令Jcc和JMP可以实现分支控制,单分支:求绝对值等,双分支:显示BX最高位等,多分支:例4.4等,15/18,汇编语言程序的基本结构,分支结构:利用条件转移指令,使程序执行到某一指令后,根据条件是否满足,来改变程序执行的顺序。一般先用比较指令或数据操作及位检测指令来改变标志寄存器各个标志位,然后用条件转移指令进行分支。绘制程

7、序流程图步骤必不可少!绘制程序流程图,一般先按上下流程线写,再完成分支部分。绘制程序流程图的判断环节时,要特别注意把握逻辑关系和标志位的意义。,单分支程序设计,条件成立跳转,否则顺序执行分支语句体;注意选择正确的条件转移指令和转移目标地址,例题 求绝对值,;计算AX的绝对值cmp ax,0jns nonneg;分支条件:AX0neg ax;条件不满足,求补nonneg:mov result,ax;条件满足;计算AX的绝对值cmp ax,0js yesneg;分支条件:AX0jmp nonneg ;分支条件:AX=0yesneg:neg ax;条件不满足,求补nonneg:mov result,

8、ax;条件满足,Good,Bad,例题 无符号数除以2,;AX中存放的无符号数;如果是偶数除以2,如果是奇数,则加1后除以2test ax,01h;测试AX最低位jz even;最低位为0:AX为偶数add ax,1;最低位为1:AX为奇数,需要加1even:rcr ax,1;AXAX2;如果采用SHR/SAR指令,则不能处理AXFFFFH的特殊情况,双分支程序设计,条件成立跳转执行第2个分支语句体,否则顺序执行第1个分支语句体。注意第1个分支体后一定要有一个JMP指令跳到第2个分支体后,例题 显示BX最高位-1,shl bx,1;BX最高位移入CFjc one;CF1,即最高位为1,转移mo

9、v dl,0 ;CF0,即最高位为0,DL0jmp two;一定要跳过另一个分支体one:mov dl,1;DL1two:mov ah,2int 21h;显示,另一种解法,例题 显示BX最高位-2,shl bx,1;BX最高位移入CFjnc one;CF0,即最高位为0,转移mov dl,1 ;CF1,即最高位为1,DL1jmp two;一定要跳过另一个分支体one:mov dl,0 ;DL0two:mov ah,2int 21h;显示,另一种解法,例题 显示BX最高位-3,mov dl,0;DL0shl bx,1;BX最高位移入CFjnc two;CF0,最高位为0,转移mov dl,1;C

10、F1,最高位为1,DL1two:mov ah,2int 21h;显示,双分支程序可以改为单分支程序,多分支程序设计,多个条件对应各自的分支语句体,哪个条件成立就转入相应分支体执行。多分支可以化解为双分支或单分支结构的组合,例如: 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,图示,多分支结构,地址表形成多分支,需要在数据段事先安排一个按顺序排列的转移地

11、址表输入的数字作为偏移量。因为有2个字节16位偏移地址,所以偏移量需要乘2关键是要理解间接寻址方式JMP指令,.datamsgdb Input number(18):,0dh,0ah,$msg1db Chapter 1 : .,0dh,0ah,$msg2db Chapter 2 : .,0dh,0ah,$.msg8db Chapter 8 : . ,0dh,0ah,$tabledw disp1,disp2,disp3,disp4dw disp5,disp6,disp7,disp8;取得各个标号的偏移地址,例4.4 数据段1/3,start1:mov dx,offset msg;提示输入数字mo

12、v ah,9int 21hmov ah,1;等待按键,ASCII CODEint 21hcmp al,1;数字 8?ja start1and ax,000fh;将ASCII码转换成数字,例4.4 代码段2/3,dec axshl ax,1;等效于add ax,axmov bx,axjmp tablebx;(段内)间接转移:IPtable+bxstart2:mov ah,9int 21h.exit 0disp1:mov dx,offset msg1;处理程序1jmp start2disp2:mov dx,offset msg2;处理程序2jmp start2 .,例4.4 代码段3/3,4.5

13、循环程序设计,循环结构一般是根据某一条件判断为真或假来确定是否重复执行循环体循环指令和转移指令可以实现循环控制,循环指令LOOPE:例4.6,转移指令:例4.7,多重循环:例4.8等,循环指令LOOP:例4.5,循环结构, 循环程序结构形式,DO-WHILE 结构 DO-UNTIL 结构,初始化: 设置循环的初始状态循环体: 循环的工作部分及修改部分控制条件:计数控制(LOOP) 特征值控制(LOOPZ/LOOPNZ/ 条件跳转指令), 循环程序结构说明,例4.5:把 BX 中的二进制数以十六进制的形式显示在屏幕上,如:1011 0010 1111 1010 B B2FAH,BX,1234,分

14、析:(1)程序结构的确定 由题意应该把BX的内容从左到右每4位为一组在屏幕上显示出来,显然这可以用循环结构来完成,每次显示一个十六进制数位,因而循环次数是已知的,计数值为4。,(2)循环体的构成(算法确定) 循环体应该包括:二进制到所显示字符的ASCII之间的转换,以及每个字符的显示。 需要了解相关知识:字符和其ASCII码之间的关系? “0”“9” 30H39H, “A”Z” 41H5AH如何显示一个字符?(a)将显示字符的ASCII码放入DL寄存器;(b)将AH的内容置为2(功能号);(c)执行INT 21H(DOS 功能调用)。,(3)循环控制条件分析因为循环次数已知,可以使用LOOP指

15、令实现,但是必须注意:由于循环移位指令中使用CL寄存器作为移位次数寄存器,而LOOP 指令的循环次数隐含在CX寄存器中,因此,必须注意这两者之间的冲突。除了可以使用LOOP指令之外,还可以使用条件跳转指令来实现。, mov cx, 4 ;初始化rotate: push cx mov cl, 4 rol bx, cl mov al, bl and al, 0fh add al, 30h ; 09 ASCII 30H39H cmp al, 3ah jl printit;al3ah add al, 7h ; AF ASCII 41H46H printit: mov dl, al mov ah, 2 int 21h pop cx loop rotate ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

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