-第4章 汇编语言程序设计

上传人:少*** 文档编号:243135155 上传时间:2024-09-16 格式:PPT 页数:19 大小:451.50KB
返回 下载 相关 举报
-第4章 汇编语言程序设计_第1页
第1页 / 共19页
-第4章 汇编语言程序设计_第2页
第2页 / 共19页
-第4章 汇编语言程序设计_第3页
第3页 / 共19页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第4章 汇编语言程序设计,4.1,顺序程序设计,4.2,分支程序设计,4.3,循环程序设计,4.4 子程序设计,4.5 宏结构程序设计,4.6 模块化程序设计,4.7 输入输出程序设计,顺序程序完全按指令书写的前后顺序执行每一条指令,是最基本、最常见的程序结构。,4.1 顺序程序设计,例4.1,例4.2,例4.1,.,model small,.stack 256,.data,X,dw,5,Y,dw,6,Z,dw,7,W,dw,?,.,code,.startup,mov,ax,X,add ax,Y,adc,ax,Z,mov,W,ax,.exit 0,end,例4.2,qvardq,1234567887654321h,mov,al,byte,ptr qvar,6,mov,byte,ptr qvar,7,al,mov,al,byte,ptr qvar,5,mov,byte,ptr qvar,6,al,mov,al,byte,ptr qvar,4,mov,byte,ptr qvar,5,al,mov,al,byte,ptr qvar,3,mov,byte,ptr qvar,4,al,mov,al,byte,ptr qvar,2,mov,byte,ptr qvar,3,al,mov,al,byte,ptr qvar,1,mov,byte,ptr qvar,2,al,mov,al,byte,ptr qvar,0,mov,byte,ptr qvar,1,al,mov,byte,ptr qvar,0,0,12,34,56,78,87,65,43,21,h,34,56,78,87,65,43,21,00,h,移位后,图示,例4.2 64位数据左移8位的图示,12,34,56,78,87,65,43,21,00,qvar,0,qvar,1,qvar,2,qvar,3,qvar,4,qvar,5,qvar,6,qvar,7,分支程序根据条件是真或假决定执行与否。,判断的条件是各种指令,如,CMP、TEST,等执行后形成的状态标志。,转移指令,Jcc,和,JMP,可以实现分支控制;还可以采用,MASM 6.x,提供的条件控制伪指令实现。,4.2 分支程序设计,单分支:例2.41,双分支:例4.3,多分支:例4.4,例2.41,;计算,XY,的绝对值,mov,ax,X,sub ax,Y,jns nonneg,;,条件满足(,X-Y 0)?,neg,ax,;,条件不满足,求补,nonneg,:,mov,result,ax,;,条件满足,例4.3,mov,al,_b,imul,al,mov bx,ax,mov,al,_a,imul,_c,mov cx,4,imul cx,cmp bx,ax;,比较二者大小,jge,yes;,条件满足?,mov,tag,0,;,第一分支体:条件不满足,,tag0,jmp,done,;,跳过第二个分支体,yes:,mov,tag,1,;,第二分支体:条件满足,,tag1,done:.exit 0,前一个分支后要使用,JMP,指令,切切!,or ah,ah,;,等效于,cmp,ah,0,jz,function0,;ah=0,,转向,function0,dec,ah,;,等效于,cmp,ah,1,jz,function1,;ah=1,,转向,function1,dec,ah,;,等效于,cmp,ah,2,jz,function2,;ah=2,,转向,function2,.,多分支结构,AH=0,fuction0,Y,N,AH=1,fuction1,Y,N,AH=2,fuction2,Y,N,Table,db,disp1, disp2, disp3, disp4, .,例4.4 利用入口地址表,形成多分支,地址表,分支1地址,分支2地址,.,数据段,程序段,分支体,操作,.,data,msgdb,Input number(18):,0dh,0ah,$,msg1,db,Chapter 1 : Fundamentals of Assembly Language,0dh,0ah,$,msg2,db,Chapter 2 : 8086 Instruction Set,0dh,0ah,$,msg3,db,Chapter 3 : Statements of Assembly Language,0dh,0ah,$,msg4,db,Chapter 4 : Assembly Language Programming,0dh,0ah,$,msg5,db,Chapter 5 : 32-bit Instructions and Programming,0dh,0ah,$,msg6,db,Chapter 6 : Mixed Programming with C/C+,0dh,0ah,$,msg7,db,Chapter 7 : FP Instructions and Programming,0dh,0ah,$,msg8,db,Chapter 8 : MMX Instructions and Programming,0dh,0ah,$,table,dw,disp1,disp2,disp3,disp4,disp5,disp6,disp7,disp8,;,取得各个标号的偏移地址,例4.4 数据段,start1:,mov dx,offset,msg,;,提示输入数字,mov,ah,9,int,21h,mov,ah,1;,等待按键,int,21h,cmp,al,1;,数字 8?,ja,start1,and ax,000fh;,将,ASCII,码转换成数字,dec,ax,shl,ax,1;,等效于,add ax,ax,mov bx,ax,jmp,table,bx,;(,段内)间接转移:,IPtable+,bx,例4.4 程序段,start2:,mov,ah,9,int,21h,.exit 0,;,disp1:,mov dx,offset msg1;,处理程序1,jmp,start2,disp2:,mov dx,offset msg2;,处理程序2,jmp,start2,disp3:,mov dx,offset msg3;,处理程序3,jmp,start2,disp4:,mov dx,offset msg4;,处理程序4,jmp,start2,.,例4.4 分支体,循环结构一般是根据某一条件判断为真或假来确定是否重复执行循环体。,循环指令和转移指令可以实现循环控制;还可以采用,MASM 6.x,提供的循环控制伪指令实现。,4.3 循环程序设计,循环指令,LOOPE:,例4.6,转移指令:例4.7,多重循环:例4.8,循环指令,LOOP:,例4.5,.,model small,.stack 256,.data,sum,dw,?,.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 计算1100数字之和,循环次数固定,.,startup,mov,ax,wordX,;,测试目标送,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 确定,wordX,中1的最低位数,最大循环次数固定,,满足条件退出。,.,startup,mov bx,offset string,again:,mov,al,bx,;,取一个字符,or al,al;,是否为结尾符0,jz,done;,是,退出循环,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,next,;,前一个不大于后一个元素,则不进行交换,xchg,al,bx,+1;,否则,进行交换,mov,bx,al,next:,inc bx,;,下一对元素,dec dx,jnz inlp,;,内循环尾,loop,outlp,;,外循环尾,例4.8 对数组元素排序:,冒泡法,双重循环,,内循环含分支,“冒泡法”是一种排序算法,不是最优的算法,但它易于理解和实现。,冒泡法从第一个元素开始,依次对相邻的两个元素进行比较,使前一个元素不大于后一个元素;将所有元素比较完之后,最大的元素排到了最后;然后,除掉最后一个元素之外的元素依上述方法再进行比较,得到次大的元素排在后面;如此重复,直至完成就实现元素从小到大的排序。,这是一个双重循环程序结构。外循环由于循环次数已知,可用,loop,指令实现;而内循环次数每次外循环后减少一次,我们用,DX,表示。内循环体比较两个元素大小,又是一个分支结构。,冒泡法,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!