汇编语言程序设计课件第3讲汇编语言程序设计初步

上传人:san****019 文档编号:71164629 上传时间:2019-01-19 格式:PPT 页数:26 大小:419.81KB
返回 下载 相关 举报
汇编语言程序设计课件第3讲汇编语言程序设计初步_第1页
第1页 / 共26页
汇编语言程序设计课件第3讲汇编语言程序设计初步_第2页
第2页 / 共26页
汇编语言程序设计课件第3讲汇编语言程序设计初步_第3页
第3页 / 共26页
汇编语言程序设计课件第3讲汇编语言程序设计初步_第4页
第4页 / 共26页
汇编语言程序设计课件第3讲汇编语言程序设计初步_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《汇编语言程序设计课件第3讲汇编语言程序设计初步》由会员分享,可在线阅读,更多相关《汇编语言程序设计课件第3讲汇编语言程序设计初步(26页珍藏版)》请在金锄头文库上搜索。

1、第三讲 汇编语言程序设计初步,基本概念 程序设计的步骤 简单程序设计 指令的不同执行序列的问题 比较指令 指令学习 本讲小结,1、基本概念,程序 = 指令的有序序列 计算机是通过执行程序来解决问题的 计算机是通过执行指令序列来解决问题的 指令是对计算机完成何种操作及对什么操作的命令,由操作码和操作数两部分组成 操作码:指示计算机所要执行的操作 操作数:指出指令执行操作的过程中所需要的操作数 每种计算机都有一组指令集供用户使用 指令系统 寻址方式:获得操作数的方式,2、程序设计的步骤,分析问题 做什么? 设计解决方法 怎么做? 画出流程图 编写程序 如何实现? 运行调试 让程序能够运行 程序测试

2、 正确吗? 设计总结,3、简单程序设计,简单? 数据结构简单,数据量小 寻址方式简单 任务 计算1+2+3+4的和 一个简单的汇编语言程序 不用乘法指令计算一个数x的14倍,3.1 第一个程序,计算1+2+3+4的和放入AH寄存器 程序段: mov ah,1 ; ah=1 add ah,2 ; ah=ah+2 add ah,3 ; ah=ah+3 add ah,4 ; ah=ah+4 int 20h ; 程序结束 参见教材 mov 指令 add 指令 sub 指令,使用debug编写执行这个程序,运行debug程序 开始运行 进入汇编输入方式(A 命令) A 100 从内存偏移地址100H开始

3、存放程序 依次输入这个程序的每行 最后一行直接回车 察看程序(U 命令) U 100 10b 反汇编从100H到10BH的程序 执行该程序(G 命令) g 从IP开始执行程序 察看寄存器 (R 命令) R 单步执行命令(T命令 / P命令) T P,使用emu8086编写执行这个程序,打开emu8086 新建空白程序 输入该程序 运行 检查ah的内容 单步运行 观察ah的变化,3.2 一个简单的汇编语言程序,程序 mov ax,0123h mov bx,0456h add ax,bx add ax,ax int 20h 在emu8086中执行该程序 假设ax中存放的是x,bx中存放的是y 该程

4、序的结果是什么?,3.3 不用乘法指令计算一个数x (x在cl中)的14倍放入ah寄存器,方法1 14x=8x+4x+2x mov cl,3 mov al,cl add al,al mov bl,al add bl,bl mov cl,bl add cl,cl mov ah,0 add ah,cl add ah,bl add ah,al int 20h,方法2 14x=16x-2x mov cl,3 mov al,cl add al,al add al,al add al,al add al,al add cl,cl mov ah,al sub ah,cl int 20h,4、指令的不同执行序

5、列的问题,在C语言中有如下命令 if (ab) x=a; else x=b; 该命令做什么? 条件语句! 根据条件决定做什么操作 汇编如何实现? 任务 将bx,cx中较大数放入ax 计算1+2+3+100的和存入AX中 将AX,BX和CX寄存器中最大数保存在DX中,4.1 将(bx,cx)中较大数放入ax,我们必须比较 bx 和 cx cmp指令 cmp bx,cx 转移指令 jc 标号(小于转移) jmp 标号 程序研究 mov bx,100 mov cx,50 cmp bx,cx ;比较bx和cx jc skip ;bxcx 转移 mov ax,bx jmp end ;跳转 skip: m

6、ov ax,cx end: int 20h ;结束,4.2 用流程图表示思想,cmp bx,cx jc skip mov ax,bx jmp end skip: mov ax,cx end: int 20h,4.3 能不能简单些?,mov cx,-100 mov bx,-50 mov ax,bx cmp cx,ax jc end mov ax,cx end: int 20h,4.4 程序的问题:可以是带符号数吗?,mov cx,-100 mov bx,-50 mov ax,bx cmp cx,ax jc end mov ax,cx end: int 20h,4.5 计算1+2+3+100的和存

7、入AX中,mov ax,0 mov cx,0 loop: add ax,cx add cx,1 cmp cx,101 jc loop int 20h,AX = 0 CX = 0,CX 101 ?,AX = AX + CX CX = CX + 1,结束,4.6 简单程序也可能出错!,mov ax,0 mov cx,0 loop: add cx,1 add ax,cx cmp cx,101 jc loop int 20h,AX = 0 CX = 0,CX 101 ?,CX = CX + 1 AX = AX + CX,结束,4.7 将AX,BX和CX寄存器中最大数保存在DX中,算法思路 首先将AX和

8、BX中大的放在DX中 然后将CX和DX中大的放在DX中 框图,在保证逻辑关系不变的情况下,框图可以变形,尽量将所有框放在一条直线上,YES向外,根据框图编写程序,CMP AX,BX JNC L1 MOV DX,BX JMP L2 L1:MOV DX,AX L2:CMP CX,DX JC L3 MOV DX,CX L3: INT 20H,L1:,L2:,L3:,不同的思路得到不同的算法导致不同的程序,MOV DX,AX CMP AX,BX JNC L1 MOV DX,BX L1: CMP DX,CX JNC L2 MOV DX,CX L2: INT 20H,开始,结束,AXBX,AXDX,BXD

9、X,DXCX,CXDX,N,Y,Y,N,L1:,L2:,5. 比较指令小结,比较两个无符号数,并根据比较结果转移 :格式:JB (JNAE,JC) OPR :格式:JNB (JAE,JNC) OPR :格式:JBE (JNA) OPR :格式:JNBE (JA) OPR,比较两个带符号数,并根据比较结果转移 :格式:JL (JNGE) OPR :格式:JNL (JGE) OPR :格式:JLE (JNG) OPR :格式:JNLE (JG) OPR,比较的实质,程序1 mov dx,1 jc next mov dx,3 next: int 20h 程序 mov dx,1 jnc next mo

10、v dx,3 next: int 20h 执行结果有什么不同? 如果在执行转移指令前修改CF位会如何?,比较指令的实质是根据标志寄存器中相应的标志位决定转移的。 标志位=0还是=1是由什么决定的呢? 很多指令的执行都会影响标志位 察看 CMP,ADD等指令 察看 MOV指令,6.指令学习,数据传送指令 P47 MOV 传送 P444 不影响标志 MOV reg,data MOV reg1,reg2 XCHG 交换 P451 不影响标志 XCHG reg1,reg2 算术运算指令 P58 ADD 加法指令 P436 INC 加1指令 P441 SUB 减法指令 P450 DEC 减1指令 P439 NEG 求补指令 P445 CMP比较指令 P438,思考,计算1+3+5+99的和 计算3+6+9+12+99的和 将AX,BX,CX中大小居中的数存放在DX中,7. 本讲小结,什么是程序? 程序是如何执行的? 怎样将思想表示出来? 程序怎样调试? 怎样发现程序中的错误? 数据量如果较多怎么办?,作业,1、编程 若f(1)=1;f(2)=1;f(n)=f(n-1)+f(n-2) 计算菲波纳契数列的第n项f(n)(n10) 假设n存放在cl中,计算出的结果放在AX中 2、编程 将AX,BX,CX中大小居中的数存放在DX中 要求 流程图 程序 测试用例,

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

最新文档


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

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