微机-15程序设计

上传人:第*** 文档编号:54493952 上传时间:2018-09-14 格式:PPT 页数:18 大小:194KB
返回 下载 相关 举报
微机-15程序设计_第1页
第1页 / 共18页
微机-15程序设计_第2页
第2页 / 共18页
微机-15程序设计_第3页
第3页 / 共18页
微机-15程序设计_第4页
第4页 / 共18页
微机-15程序设计_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《微机-15程序设计》由会员分享,可在线阅读,更多相关《微机-15程序设计(18页珍藏版)》请在金锄头文库上搜索。

1、43 汇编语言程序设计 3.1 汇编语言程序编制步骤 分析问题,确定算法 准备数据、数据表示范围、细分步骤、标志位 根据算法设计程序框图 自上而下;逐步细化;正确合理地使用寄存器;合理分配存储空间 编写源程序,作静态检查,注意程序分支处理! 上机调试 检查算法 编制程序说明文件 设计思想;参数定义;内存分配;程序清单 3.2 8086汇编语言程序的分段结构,存储空间分段管理,所以,源程序必须用段定义伪指令进行分段,使代码;数据;堆栈等分开存储,既有利于内存应用,程序安全可靠,又使程序清晰明了。总的分段数目不限,各段顺序自由,但当前段只有4段(代码;数据;堆栈;附加)。 一般程序所需堆栈较小时,

2、可以不自己设置堆栈段,而直接利用操作系统的堆栈,这时忽略连接过程中出现的警告: WARNING:NO STACK SEGMENT THERE WAS 1 ERROR DETECTED 各段的段基址在程序调入内存时确定,3.4 程序设计的模块化和结构化 模块化:将大任务化整为零,分出层次,独立编制. 多人分工,加快速度,易读易懂,调试和修改容易,减少重复劳动.但要处理好模块与模块间的通信(连接信息和参数传递) 结构化:任何程序都可以由以下三种基本结构的组合而成 顺序结构;分支结构;循环结构 3.5 上机过程 DOS是汇编语言在PC上的支撑软件 编辑各个源程序模块 EDIT.EXE 写字板 .AS

3、M扩展名 LP.ASM,汇编源程序 CMASM LP.ASM 生成XXX.OBJ和XXX.LST文件(LP.OBJ),显示如下信息: xxxxxx Warning errors xxxxxx Sever errors 用EDIT XXXX.LST查看具体错误位置和类型,重新编辑、修改后再汇编,直到不再报错。 连接 CLINK LP.OBJ 生成XXXX.EXE(LP.EXE) .MAP和库文件.LIB一般不需要 多目标模块需要连接时:,CLINK 模块名1+模块名2+模块名n 调试程序 用DEBUG.COM来观察程序的运行过程,查找程序的逻辑错误。如有问题,则用编辑程序修改后再重复做以上的步骤

4、。 运行程序 CLP 3.6 汇编语言程序的调试技术(DEBUG.COM使用) 进入与退出 CDEBUG -Q ;”-”是DEBGU的提示符 调试状态默认输入为十六进制! 装入被调试程序 CDEBUG XXX.EXE,-N XXX.EXE ;文件命名命令 -L ;文件装入命令 显示命令 -D 地址 ;显示从地址开始的80H字节内存 -D 范围 ;显示地址范围内的内存内容 -D DS:100 ;(DS)+100H -D 100 ;(上次所用段寄存器)+100H -D DS:100 10F -R ;显示和修改寄存器的内容 FR用状态字符表示: OF DF IF SF ZF AF PF CF 置位1

5、 OV DN EI NG ZR AC PE CY 复位0 NV UP DI PL NZ NA PO NC,修改寄存器内容 -R DS DS 0962 ;DS原有内容 : 10a2 ;修改后的DS内容 修改内存单元内容 -E 地址 单元内容表 -E ds:10 eb ABC 34 反汇编 -U 地址 ;任何数据都可以反汇编,但只有代码段有意义! -U 范围 -U CS:0 12 汇编 -A 地址 ;回车后输入汇编语句,程序运行 -G =地址,地址1,地址2, 从“=地址”开始执行程序,其后的地址是设置的断点。 G 命令不带参数表示从当前指令执行到程序结束! -T=地址,值 ;跟踪方式 从“=地址

6、”开始执行程序,“值”是一次执行的指令条数。 -T=D4 T命令进入子过程和中断服务程序内部! -P P命令连续执行循环指令,且将CALL XXXX和INT n当一条指令执行,不进入子过程和中断服务程序内部。,9.统计16位二进制数X中1的个数,程序框图如下,*和*处应填入的操作是什么? 10.将一位十六进制数转换成ASCII 码并输出的程序框图如下, *处应填入什么操作? 取X到AX,CX清零 取数X Y Y N N N 结果单元(CX) X+7 Y X+0 (CX)(CX)+1 结束 输出 AX逻辑左移一位 结束 * X=0 * X9 * CF=1,例BCD31 内存中有ASCII码表示的

7、两个两位十进制数,将它们相加,结果仍存放于内存中。 源数的存放方式:个数,按输入顺序高位字符在低地址单元。 结果数的存放方式:按输入顺序高位字符在低地址单元。,置指针(先指向个位)、计数初值、地址自动减,循环(分别处理个、十位)、ASCII非压缩BCD、加、存结果,处理百位、返回DOS,mov ds,ax mov al,byte ptr s add al,55h daa mov bl,al mov al,byte ptr s+1 adc al,0 daa mov bh,al ;bx=s+55 mov al,byte ptr w sub al,bl,das mov byte ptr u,al m

8、ov al,byte ptr w+1 sbb al,bh das mov byte ptr u+1,al mov ah,4ch int 21h code ends end start,44汇编语言编程示例 4.1 顺序结构程序设计 例4.1 内存中有一个正两位十进制数的ASCII字符串,将该数乘3加7(设结果不超过两位十进制数范围),然后,仍用ASCII字符串的形式将结果存储在内存中. 开始取ASCII字符串转换成BCD码转换成二进制数乘3加7 结果转换成BCD码转换成ASCII字符串结束,DATA SEGMENT DATA_IN DB 26 DATA_OUT DB ?,? DATA EDNS

9、 STACK1 SEGMENT PARA STACK DW 20H DUP(0) STACK1 ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX LEA BX,DATA_IN,MOV AL,BX AND AL,0FH ;取ASCII的低4位 MOV AH,AL INC BX MOV AL,BX AND AL,0FH ;(AX)=X是BCD AAD ;(AX)是2进制,(AH)=00H MOV AH,AL SHL AL ;2*(AL),2X ADD AL,AH ;3X ADD AL,7

10、;(AL)=2进制结果 XOR AH,AH ;(AH)=0,MOV CL,10 DIV AX,CL ADD AL,30h ;商是十位,(AL)是其ASCII ADD AH,30h ;余是个位,(AH)是其ASCII LEA BX,DATA_OUT ;=INC BX MOV BX,AH INC BX MOV BX,AL MOV AH,4CH INT 21H CSEG ENDS END START,例4.2 用查表法将一位十六进制数转换成它对应的ASCII,放如ASC单元. 开始建立与0F对应的ASCII表取十六进制数查表 结果存储结束 4.2 分支结构程序设计 例4.3 求内存中以DATA1单元

11、开始的连续三个有符号整数的中间值,并将结果存入DATA2单元. 例4.4 编程实现符号函数 1 (X0) Y= 0 (X=0) (-128X127) -1 (X0),1214.下列程序执行后指定单元的内容 MOV CL,4 MOV AL,65H MOV AX,3456H MOV DX,248AH MOV AH,0 MOV BX 3450H MOV AX,8103H MOV DL,10 NEG BX ROL DX,CL DIV DL ADC AX,BX MOV BH,AH MOV CL,4 SAR BH,CL SHL AL,CL SHL AX,CL OR AL,AH OR DL,BH (AX)=?(DX)=? (AL)=? (CF)=? (AX)=?;(BX)=?,

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

当前位置:首页 > 办公文档 > 解决方案

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