版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、例题一: 用数据运算指令,对两个16位数做加法运算。这两个数从地址0050H开始连续存放,低位在小地址一端,结果放在这两个数之后。 (1)分析题目:它是一个16位数相加的问题。可以直接用字的加法运算 (2)内存空间分配:ORG伪指令指定内存中的偏移。 (3)运算时应注意:双存储器不能直接相加,应有一个加数在寄存器 DATASEGMENT ORG 50H VAR DW 11FFH DW 1 DW 0 DATAENDS CODESEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX,6.2 顺序(查表)程序设计,MOV AX,VAR A
2、DDAX,VAR+2 MOVVAR+4,AX MOV AH,4CH INT 21H CODEENDS ENDSTART,例题二: 将内存(0050)单元的内容拆成两段每段4位,并将它们分别存 入内存(0051)和(0052)单元。即(10050)单元中的低4位放入(0051)的低4位,(0050)单元中的高4位放入(0052)的低4位,而(0051)和(0052)的高4位均为零。 (1)先取出该数用逻辑指令与上个0FH,得到低4位,存入内存。 (2)再取出该数用移位指令逻辑右移SHR四次,取得高4位。 (3)做掩码操作时注意不要破坏原始数据 DATASEGMENT ORG 50H VARDB3
3、 DUP (?) DATAENDS CODESEGMENT ASSUME CS:CODE,DS:DATA START:MOVAX,DATA MOV DS,AX MOVAL,VAR ANDAL,0FH MOVVAR+1,AL MOVAL,VAR,MOVCL,4 SHRAL,CL MOVVAR+2,AL MOVAH,4CH INT21H CODE ENDS ENDSTART,在实际问题中常会遇到以下问题 1、代码转换 2、求一些需要复杂运算才能求得的函数值 例题三:从键盘上输入一个0F之中的数,在屏幕上显示出其 对应的LED码值。 led db 3fh,06h,5bh,4fh,66h,6dh,7d
4、h,07h db 7fh,6fh,77h,7ch,39h,5eh,79h,71h mov ah,1 int 21h sub al,30h cmp al,0ah jb next sub al,7h next:lea bx,led xlat CALL CRLF,mov bh,al mov cl,4 shr al,cl add al,30h cmp al,3ah jb next1 add al,7 next1: CALLDISPLAY mov al,bh and al,0fh add al,30h cmp al,3ah jb next2 add al,7 next2:CALL DISPLAY,例题四
5、:从键盘任意输入一个19之中的整数。在屏幕上显示它对 应的对数值(小数点后四位精度)。输入的字符如果不 在19之间则显示inputerror inputagain,datasegment messdb input error,0dh,0ah,input again,0dh,0ah,n乘8,找到对应串的起始点 movah,9 int21h jmpagain;重复查找,使用强制退出 codeends endstart,在实际问题中,会有根据不同的情况进行不同的处理要求。 这种思想体现在程序设计中,就是根据不同条件而跳到不同的程序段去执行,这就构成了分支程序。 在汇编语言程序设计中,跳跃是通过条件转
6、移指令来实现的 例题一:将BX寄存器加一并判断BX寄存器值是否为16D,如果是16D 则调用子程序CRLF并将BX清零,如果不是则继续执行。 : INCBX CMPBX,16 JNZNEXT CALLCRLF XORBX,BX NEXT: :,6.3 分支程序设计,例题二: 从键盘输入任意一个字符,如果ASCII码大于39H则显示 字符C。如果ASCII码小于39H则显示字符N。 : MOV AH,1 INT 21H CMP AL,39H JA NEXT MOV AH,2 MOV DL,N INT 21H JMP EXIT NEXT: MOV AH,2 MOV AL,C INT 21H EXI
7、T: :,例题三:实现右边的分段函数 第一种实现 CMP X,1 JGE PART2 CMP X,0 JGE NEXT1 MOV Y,-1 JMP EXIT NEXT1:MOV Y,0 JMP EXIT PART2:CMP X,2 JGE NEXT2 MOV Y,1 JMP EXIT NEXT2:MOV Y,3 EXIT: :,第二种实现方法 CMP X,0 JL NEXT1 CMP X,1 JL NEXT2 CMP X,2 JL NEXT3 MOV Y,3 JMP EXIT NEXT1:MOV Y,-1 JMPEXIT NEXT2:MOV Y,0 JMPEXIT NEXT3:MOV Y,1
8、JMPEXIT EXIT:,汇编语言中常使用入口地址表(散转表)的方法实现多向分支 例题三:根据AL寄存器中的那一位为1把程序转移到8个不同的分支。 datasegment tabdwbranch1 dwbranch2 dwbranch3 dwbranch4 dwbranch5 dwbranch6 dwbranch7 dwbranch8 dataends codesegment assumecs:code,ds:data atarta:movax,data movds,ax cmpal,0 jzexit,leabx,tab lab:shral,1 jcnext addbx,2 ;指向跳过一个入
9、口地址。 jmplab next:jmpword ptr bx ;程序转移的段内间接寻址。 exit:movah,4ch int21h ;各分支代码部分。每个分支结束后都回到exit标号处。 branch0:. . jmpexit branch1:. . jmpexit branch2:. . jmpexit,branch3:. . jmpexit branch4:. . jmpexit branch5:. . jmpexit branch6:. . jmpexit branch7:. . jmpexit code ends endstart,当需要多次重复执行相同或相似的操作,而每次重复参数
10、均做有规 律变化时,可用循环结构来实现 1、计数器控制(循环次数已知) 2、条件控制(循环次数未知) 例题一:求1+2+10 : MOVAX,0 MOVCX,10 NEXT:ADDAX,CX LOOPNEXT :,6.4 循环程序设计,: MOVAX,0 MOVCX,1 NEXT:ADDAX,CX INCCX CMP CX,10 JBENEXT :,例题二:从地址1000H开始求内存中值为正的内存单元的累加和, 遇到零则停止累加。 MOV SI,1000H MOVAX,0 START:CMPSI,0 JZEXIT JLNEXT ADDAX,SI NEXT:INCSI JMPSTART EXIT
11、: ,例题三:求有100个学生,每个学生有四门课程的一个成绩表中每 个学生的总成绩 TABLEDB100 DUP ( 4 DUP ( ? ) ) SUMDB100 DUP ( 0 ) MOVSI,0 MOVDI,0 MOVCX,100 L111:PUSHCX MOVCX,4 MOVBX,0 MOVAX,0 L222:ADCAX,TABLESIBX INCBX LOOPL222 MOVSUMDI,AX,POPCX ADDSI,4 INCDI LOOP L111,内层循环是外层循环的 工作部分 外层循环负责向内层提供 服务,子程序的应用 在一个程序中的多处或在多个程序中需要用到同一段程序。 模块化
12、的程序设计方法的实现 子程序设计中需要解决的几个问题 子程序的定义。 子程序的调用和返回。 子程序中的现场保护。 主程序与子程序之间的数据传送。 子程序的说明。,6.5 子程序设计,一、子程序的定义 子程序是用过程定义伪指令PROC和ENDP来定义 属性有两种: NEAR:调用程序和过程若在 同一代码段中,使用NEAR属性。 FAR:调用程序和过程若不在同一代码段中,使用FAR属性,子程序名 PROC 属性 : : RET 子程序名 ENDP,CODESEGMENT : CALL PPP : CODEENDS,PPP PROC NEAR : : RET PPP ENDP,CODE1 SEGME
13、NT : CALL PPP : CODE1 ENDS,CODE2 SEGMENT : CODE2 ENDS,PPP PROC FAR : RET PPP ENDP,二、子程序的调用和返回 调用和返回由CALL和RET指令完成。 正确调用和正确返回是正确执行子程序的保证。 (1)子程序的调用 CALL 子程序地址,段内调用 (SP) (SP)-2 (SP+1:SP) (IP) (IP) 子程序入口偏移地址,段间调用 (SP) (SP)-2 (SP+1:SP) (CS) (CS) 子程序入口段地址 (SP) (SP)-2 (SP+1:SP) (IP) (IP) 子程序入口偏移 地址,例如: CAL
14、LNEAR PTR 子程序名 CALLFAR PTR 子程序名 CALLBX CALL WORD PTR BX CALLVAR1;设变量VAR1是字变量 CALL DWORD PTR BX CALLVAR2 ;设变量VAR2是双字变量 (2)子程序的返回 RET 或 RET 正偶数,段内返回 (IP) (SP+1:SP) (SP) (SP)+2 (SP) (SP)+正偶数,段间返回 (IP) (SP+1:SP) (SP) (SP)+2 (CS) (SP+1:SP) (SP) (SP)+2 (SP) (SP)+正偶数,三、子程序中的现场保护 主程序与子程序通常是独立编写,如果主程序在调用子程序以
15、 前的某些寄存器或存储单元的内容在从子程序返回到主程序后 还要使用,而子程序又恰好使用了这些寄存器或存储单元,则这 些寄存器或存储单元的原有内容遭到了破坏,那就会使程序运 行出错 现场的两种保护方法: 主程序中保护 子程序中保护(常用) 例如左图: 将子程序中的所有要用到 的寄存器都保护起来,pppproc near push cx push ax pushbx mov ax,0 movbx,0 mov cx,100 Lab:inc bx addax,bx loop lab popbx popax popcx ret pppendp,四、主程序与子程序之间的数据传送 利用寄存器传送。 利用内存
16、变量(约定内存单元)进行传送。 利用地址表传送变量地址。 利用堆栈进行传送。 注意:利用什么进行传送是约定好的,这需要在子程序的 说明部分进行说明 例题一:计算十元素字节变量var1各元素中所含1的个数,并将求得的数按顺序存入变量var2中。 主程序负责调用子程序并将需要计算的数送给子程序 子程序负责计算并返回结果。,datasegment var1 db 10 dup(?) var2 db 10 dup(0) dataends ;* codesegment assume cs:code,ds:data start: mov ax,data mov ds,ax mov cx,10 lea bx
17、,var1 lea si ,var2 lab: mov al,bx call ppp mov si,ah,inc bx inc si loop lab mov ah,4ch int 21h ppp proc near push cx mov ah,0 mov cx,8 back: shl al,1 jnc next inc ah Next:loop back pop cx ret ppp endp code ends end start,例题二:将变量 var1各元素累加并将和放在变量sum之中(不考虑溢出),var1的长度放在count中。 datasegment var1 dw 10 du
18、p(?) countdw 10 sumdw 0 dataends codesegment assume cs:code,ds:data start: mov ax,data mov ds,ax call ppp mov ah,4ch int 21h,ppp proc near push si push cx push ax lea si,var1 mov cx.count mov ax,0 lab:add ax,si inc si inc si loop lab mov sum,ax pop ax pop cx pop si ret pppendp codeends end start,测试题
19、: 如果AL=0FH,则执行DAA指令后AL中的值为? 例题三:在屏幕上显示如下结果。,1 2 3 4 5,CODESEGMENT ASSUME CS:CODE STAT:MOVCX,5 MOVDL,30H LAB:INCDL CALL DISP CALLCRLF LOOPLAB MOVAH,4CH INT21H DISPPROCNEAR MOVAH,2 INT21H RET DISPENDP,CRLFPROCNEAR PUSHDX PUSHAX MOV DL,ODH MOVAH,2 INT21H MOVDL,OAH MOVAH,2 INT21H POPAX POPDX RET CRLFEND
20、P CODEENDS ENDSTART,例题四:将变量 var1各元素累加并将和放在变量sum之中(不考虑溢出),var1的长度放在count中。(使用约定地址表的方法传递参数) datasegment var1 dw 10 dup(?) countdw 10 sumdw 0 tabledw 3 dup (0) dataends codesegment assume cs:code,ds:data start: mov ax,data mov ds,ax mov table,offset var1 mov table+2,offset count mov table+4,offset sum Lea bx,table call ppp mov ah,4ch int 21h,ppp proc near push si push cx push ax push di mov si,bx mov d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公共场所消防安全
- 供应链风险管理与预警
- 五年级语文上册第三单元第10课牛郎织女一习题课件2新人教版
- 2024秋九年级英语下册 Module 4 Rules and suggestions Unit 1 You must be careful of falling stones说课稿(新版)外研版
- -教科版高中信息技术选修3说课稿-2.2.1 计算机的网络身份- IP 地址
- 12 家乡的喜与忧 说课稿-2023-2024学年道德与法治四年级下册统编版
- 2023-2024学年沪科版(2019)高中信息技术必修一3.1《描述洗衣机的洗衣流程-了解算法及其基本控制结构》说课稿
- 高空吊篮租赁二零二五年度安全风险评估与监控合同范本3篇
- 2025年非标备件行业深度研究分析报告
- 2025年BCF膨体纱项目可行性研究报告
- 《呼吸衰竭的治疗》
- 有余数的除法算式300题
- 2024年度医患沟通课件
- 2024年中考政治总复习初中道德与法治知识点总结(重点标记版)
- 2024年手术室的应急预案
- 五年级上册小数除法竖式计算练习300题及答案
- 【外资便利店在我国的经营策略分析案例:以日本罗森便利店为例11000字(论文)】
- 6061铝合金退火工艺
- 教师职业素养与职业发展规划
- 语言规划讲义
- Talent5五大职业性格测试技巧138答案
评论
0/150
提交评论