版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、作业: P112 1、2 实验教程 P60 4 第4章 汇编语言程序设计基本技术教学重点综合应用第2章硬指令和第3章伪指令,第4章从程序结构角度展开程序设计,重点掌握:分支结构程序设计循环结构程序设计汇编语言程序设计的过程通常都包括以下步骤:1. 分析问题,确定算法2. 编制程序流程3. 正确、合理使用存贮器和寄存器4. 编写程序5. 调试运行程序程序的基本结构形式有:顺序程序、分支程序、循环程序和子程序。顺序程序的最大特点:程序从运行开始到结尾一直是按顺序逐条执行指令,且每条指令只执行一次。4.1 顺序程序设计顺序程序完全按指令书写的前后顺序执行每一条指令,是最基本、最常见的程序结构例4.1
2、 计算例4.2 移位例题 代码转换例4.1-1.model small.stack.data Xdw 5 Ydw 6 Zdw 7 Wdw ?.code.startupmov ax,Xadd ax,Yadd ax,Zmov W,ax.exit 0enddata segment X dw 5 Y dw 6 Z dw 7 W dw ? data ends code segment assume cs:code,ds:data start: push ds ;保存旧的数据段地址 sub ax,ax push ax 例4.1-2mov ax, data ;将data数据段地址mov ds, ax ;送往
3、ds段寄存器mov ax, Xadd ax, Yadd ax, Zmov W, axmov ah, 4chint 21h ;返回DOS code ends end start 例4.21/2.dataqvardq 1234567887654321h ;定义4字变量.code .startupmov 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 byt
4、e ptr qvar4,almov al,byte ptr qvar2mov byte ptr qvar3,al图示例4.22/2mov al,byte ptr qvar1mov byte ptr qvar2,almov al,byte ptr qvar0mov byte ptr qvar1,almov byte ptr qvar0,0.exit 0end12 34 56 78 87 65 43 21h34 56 78 87 65 43 21 00h移位后图示64位数据左移8位123456788765432100qvar0qvar1qvar2qvar3qvar4qvar5qvar6qvar7换
5、码指令执行前:在主存建立一个字节量表格,内含要转换成的目的代码表格首地址存放于BX,AL存放相对表格首地址的位移量换码指令执行后:将AL寄存器的内容转换为目的代码 换码指令XLAT(translate)将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给ALXLATXLAT;alds:bx+al例:代码转换mov bx,100hmov al,03hxlat 换码指令没有显式的操作数,但使用了BX和AL;因为换码指令使用了隐含寻址方式采用默认操作数XLAT例题 代码转换1/2;查表法,实现一位16进制数转换为ASCII码显示.model small.stack 256.dataASCII
6、db 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位清0 xlat ;换码:ALDS:BXALmov dl,al ;入口参数:DLALmov ah,2 ;02号DOS功能调用int
7、21h ;显示一个ASCII码字符.exit 0end4.2 输入输出功能调用向显示器输出字符 字符的输出 字符串的输出从键盘输入数据 字符的输入 字符串的输入 按键的判断裸机ROM-BIOSDOS功能调用汇编语言程序第 4 章4.2.1 中断指令中断(Interrupt )是一种改变程序执行顺序的方法中断具有多种中断类型中断的指令有3条:INT i8 IRET INTO本节主要掌握类似子程序调用指令的中断调用指令INT i8,进而学习使用DOS功能调用中断的过程主程序IRET中断服务程序断点中断请求中断请求可以来自处理器外部的中断源,也可以由处理器执行指令引起:例如执行INT i8指令。80
8、86的外部中断8086可以管理256个中断各种中断用一个向量编号来区别主要分成外部中断和内部中断外部中断来自CPU之外的原因引起的中断,又可以分成可屏蔽中断:可由CPU的中断允许标志IF控制非屏蔽中断:不受CPU的中断允许标志IF控制8086的内部中断内部中断CPU内部执行程序引起的中断,又可以分成:除法错中断:执行除法指令,结果溢出产生的 0 号中断指令中断:执行中断调用指令INT i8产生的 i8 号中断断点中断:用于断点调试(INT 3)的 3 号中断溢出中断:执行溢出中断指令,OF1产生的 4 号中断单步中断:TF1在每条指令执行后产生的 1 号中断中断指令INTINT i8;中断调用
9、指令:产生i8号中断IRET;中断返回指令:实现中断返回INTO;溢出中断指令:;若溢出标志OF=1,产生4号中断;否则顺序执行4.2.2 系统功能调用21H号中断是DOS提供给用户的用于调用系统功能的中断,它有近百个功能供用户选择使用,主要包括设备管理、目录管理和文件管理三个方面的功能ROM-BIOS也以中断服务程序的形式,向程序员提供系统的基本输入输出程序汇编语言程序设计需要采用系统的各种功能程序充分利用操作系统提供的资源是程序设计的一个重要方面,需要掌握功能调用的步骤通常按照如下4个步骤进行: 在AH寄存器中设置系统功能调用号 在指定寄存器中设置入口参数 执行指令INT 21H(或ROM
10、-BIOS的中断向量号),实现中断服务程序的功能调用 根据出口参数,分析功能调用执行情况字符输出的功能调用DOS功能调用INT 21H功能号:AH02H入口参数:DL字符的ASCII码功能:在显示器当前光标位置显示给定的字符,光标右移一个字符位置。如按Ctrl-Break或Ctrl-C则退出例:显示问号;在当前显示器光标位置显示一个问号mov ah,02h;设置功能号:ah02hmov dl,?;提供入口参数:dl?int 21h;DOS功能调用:显示 进行字符输出时,当输出响铃字符(07H)以及退格(08H)、回车(0DH)和换行(0AH)字符时,该功能调用可以自动识别并能进行相应处理字符串
11、输出的功能调用DOS功能调用INT 21H功能号:AH09H入口参数:DS:DX欲显示字符串在主存中的首地址字符串应以$(24H)结束功能:在显示器输出指定的字符串可以输出回车(0DH)和换行(0AH)字符产生回车和换行的作用例:显示字符串string db Hello,Everybody !,0dh,0ah,$ ;在数据段定义要显示的字符串.mov ah,09h;设置功能号:ah09hmov dx,offset string;提供入口参数:dx字符串的偏移地址int 21h;DOS功能调用:显示字符输入的功能调用DOS功能调用INT 21H功能号:AH01H出口参数:AL字符的ASCII码功
12、能:获得按键的ASCII代码值调用此功能时,若无键按下,则会一直等待,直到按键后才读取该键值例:字符输入+判断按键getkey:mov ah,01h;功能号:ah01hint 21h;功能调用cmp al,Y;处理出口参数alje yeskey;是“Y”cmp al,Nje nokey;是“N”jne getkey.yeskey:.nokey:.字符串输入的功能调用DOS功能调用INT 21H功能号:AH0AH入口参数:DS:DX缓冲区首地址执行该功能调用时,用户按键,最后用回车确认本调用可执行全部标准键盘编辑命令;用户按回车键结束输入,如按CtrlBreak或CtrlC则中止关键要定义好缓冲
13、区缓冲区的定义第1字节事先填入最多欲接收的字符个数(包括回车字符,可以是1255)第2字节将存放实际输入的字符个数(不包括回车符)第3字节开始将存放输入的字符串实际输入的字符数多于定义数时,多出的字符丢掉,且响铃扩展ASCII码(如功能键等)占两个字节,第1个为0例: 输入字符串buffer db 81 ;缓冲区长度 ;第1个字节填入可能输入的最大字符数db ? ;保留为填入实际输入的字符数db 81 dup(0) ;存放输入的字符串.mov dx,seg buffer ;伪指令seg取得buffer的段地址mov ds,dx ;设置数据段DSmov dx,offset buffermov a
14、h,0ahint 21h按键判断的功能调用DOS功能调用INT 21H功能号:AH0BH出口参数:AL0,当前没有按键;ALFFH,当前已经按键。功能:仅判断当前是否有按下的键,设置AL后退出例: 按任意键继续.;提示“按任意键继续”getkey:mov ah,0bhint 21hor al,al;al0?jz getkey ;al0,没有按键,继续等待4.3 分支程序设计分支程序根据条件是真或假决定执行与否判断的条件是各种指令,如CMP、TEST等执行后形成的状态标志转移指令Jcc和JMP可以实现分支控制单分支:求绝对值双分支:例4.3多分支:例4.4单分支程序设计条件成立跳转,否则顺序执行
15、分支语句体注意选择正确的条件转移指令和转移目标地址第4章例题 求绝对值;计算AX的绝对值cmp ax,0jns nonneg;分支条件:AX0neg ax;条件不满足,求补nonneg:mov result,ax;条件满足;计算AX的绝对值cmp ax,0jl yesneg;分支条件:AX0jmp nonnegyesneg:neg ax;条件不满足,求补nonneg:mov result,ax;条件满足Good Bad双分支程序设计条件成立,跳转执行第2个分支语句体;否则顺序执行第1个分支语句体注意:第1个分支体后一定要有一个JMP指令跳到第2个分支体后第4章例题 显示BX最高位shl bx,
16、1;BX最高位移入CFjc one;CF1,即最高位为1,转移mov dl,0 ;CF0,即最高位为0,DL0jmp two;一定要跳过另一个分支体one:mov dl,1;DL1two:mov ah,2int 21h;显示对比 双分支程序改为单分支程序例题 显示BX最高位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最高位mov dl,0;DL0shl b
17、x,1;BX最高位移入CFjnc two;CF0,最高位为0,转移mov dl,1;CF1,最高位为1,DL1two:mov ah,2int 21h;显示 编写分支程序,需留心分支的开始和结束例4.3 判断有无实根1/2.startupmov al,_bimul almov bx,ax;BX中为b2mov al,_aimul _cmov cx,4imul cx;AX中为4ac(设DX中无有效数据)例4.3 判断有无实根2/2cmp bx,ax;比较二者大小jge yes;条件满足?mov tag,0;第一分支体:条件不满足,tag0jmp done;跳过第二个分支体yes:mov tag,1;
18、第二分支体:条件满足,tag1done:.exit 0多分支程序设计多个条件对应各自的分支语句体,哪个条件成立就转入相应分支体执行。多分支可以化解为双分支或单分支结构的组合,例如: 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第4章图示多分支结构AH=0fuction0YNAH=1fuction1YNAH=2fuction2YN种类条件转移指令判断条件
19、条件组合关系OF SF ZF PF CF简单条件转移指令JOJNOJSJNSJZ/JEJNZ/JNEJP/JPEJNP/JPOJCJNCJA/JNBEJAE/JNBJB/JNAEJBE/JNAJG/JNLEJGE/JNLJL/JNGEJLE/JNG无符号数条件转移指令带符号数条件转移指令1 01 01 01 01 00 00 10 111aabb0 10 1aabbANDORANDOR(a=b) AND ZF=0(a=b) OR ZF=1(ab) AND ZF=0(ab) OR ZF=1地址表形成多分支需要在数据段事先安排一个按顺序排列的转移地址表输入的数字作为转移地址表内的偏移量。 16位偏
20、移地址占用2个字节单元,所以偏移量需要乘2关键是要理解间接寻址方式JMP指令地址表分支1地址分支2地址.Tabledw disp1, disp2, disp3, disp4, .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此处
21、等同于 offset disp1.code.startupstart1:mov dx,offset msgmov ah,9 ;显示“Input number(18):”int 21hmov ah,1;等待按键输入int 21hcmp al,1;数字 8?ja start1and ax,000fh;将ASCII码转换成数字例4.4 代码段2/3dec ax ;偏移量从0开始shl ax,1 ;等效于add ax,ax 即变为偶数mov bx,axjmp tablebx;(段内)间接转移:IPtable+bxstart2:mov ah,9 ;显示字符串int 21h.exit 0disp1:mov
22、 dx,offset msg1;处理程序1jmp start2. end例4.4 代码段3/3可以改为 call tablebx对应修改为 retAH=9时,INT 21H的功能是显示字符串,要求必须以$字符作为定界符,来计算串的长度。显示字符串时,如果希望光标能自动换行,则可在字符串结束前加上回车(0dH)和换行(0aH)的ASCII码。作业: 实验教程 P61 13 P62 34 例:有数组 x(x1,x2,x10) 和 y(y1,y2,y10), 编程计算 z(z1,z2,z10)z1 = x1 + y1z2 = x2 + y2z3 = x3 - y3z4 = x4 - y4z5 = x
23、5 - y5z6 = x6 + y6z7 = x7 - y7z8 = x8 - y8z9 = x9 + y9z10= x10 + y10.datax dw x1,x2,x3,x4,x5,x6,x7,x8,x9,x10y dw y1,y2,y3,y4,y5,y6,y7,y8,y9,y10z dw z1,z2,z3,z4,z5,z6,z7,z8,z9,z10logic_rule dw 00dch ;逻辑尺: 0000,0000,1101,1100 ; 1 减法 0 加法 mov bx, 0 ;设置数组内偏移量 mov cx, 10 ;设置计数器 mov dx, logic_rulenext: mo
24、v ax, xbx shr dx, 1 ;判断逻辑尺最低位 jc subtract ;为1,进行减法 add ax, ybx ;为0,进行加法 jmp short result ;存结果subtract: sub ax, ybxresult: mov zbx, ax add bx, 2 ;设置数组内下一字单元 loop next 4.4 循环程序设计循环结构一般是根据某一条件判断为真或假来确定是否重复执行循环体循环指令和转移指令可以实现循环控制多重循环:例4.6循环指令LOOP:例4.5DO-WHILE 结构 DO-UNTIL 结构控制条件初始化循环体YN控制条件初始化循环体YNDO-UNTI
25、L 循环结构 结束 初始化 循环的初始状态 循环体 循环的工作部分及修改部分 计数控制循环条件控制循环修改部分控制条件YN循环指令(loop)循环指令默认利用CX计数器,方便实现计数循环的程序结构label操作数采用相对寻址方式LOOP label;CXCX1, ;CX0,循环到标号label处LOOPZ/LOOPE label;CXCX1, ;CX0且ZF1,循环到标号label处LOOPNZ label;CXCX1, ;CX0且ZF0,循环到标号label处.model small.stack.datasumdw ?.code.startupxor ax,ax;被加数AX清0mov cx,
26、100again:add ax,cx;从100,99,.,2,1倒序累加loop againmov sum,ax;将累加和送入指定单元.exit 0end例4.5 求和 计数控制循环 循环次数固定“冒泡法”是一种排序算法,不是最优的算法,但它易于理解和实现冒泡法从第一个元素开始,依次对相邻的两个元素进行比较,使前一个元素不大于后一个元素;将所有元素比较完之后,最大的元素排到了最后;然后,除掉最后一个元素之外的元素依上述方法再进行比较,得到次大的元素排在后面;如此重复,直至完成就实现元素从小到大的排序这需要一个双重循环程序结构图示例4.6 冒泡法冒泡法的排序过程序号 数比 较 遍 数1234 1 32 2 85 3 16 4 15 5 8321615885161583285158163285815163285第4章 data segment array db 32d,85d,16d,15d,8d data ends prognam segment assume cs:prognam,ds:data start: mov ax,data ;将data数据段地址 mov ds,ax ;送往d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 英文设备贷款合同模板
- 董事长秘书助理岗位职责
- 九年级化学上册 第三章 维持生命之气-氧气3.2 制取氧气教案(新版)粤教版
- 八年级物理上册 1.1《希望你喜爱物理》第1课时教案 (新版)粤教沪版
- 2024-2025学年七年级地理上册 第三章 天气与气候 第二节 气温的变化与分布教案 (新版)新人教版
- 高中历史 5.2 无产阶级革命导师恩格斯教案2 新人教版选修4
- 2024年高中化学 第四章 电化学基础 第一节 原电池教案 新人教版选修4
- 武术作业设计人教版八下初中二年级体育教学设计
- 船长课件人教版
- 心电图出科课件
- 钢结构水平安全网施工方案
- 机械设计基础-螺纹连接的强度计算
- 《正确人生观》课件
- 《采供血过程风险管理 第2部分:献血者健康检查和血液采集风险控制规范》
- 《临床试验项目管理》课件
- 第12课+明朝的兴亡-【中职专用】《中国历史》(高教版2023基础模块)
- 鲁滨逊漂流记读书分享课件
- 北京开放大学互联网营销方案策划写作在线测验5-1:本周测一测
- 高中生知识抢答竞赛题
- 幼儿园大班语言绘本《月亮的味道》课件
- 人教版《道德与法治》七年级上册 成长的节拍 复习教案
评论
0/150
提交评论