《微机原理》第04章 习题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
开始 CX←循环次数 循环次数 BX←首元素地址 首元素地址 DL计数器清 计数器清0 计数器清 AL← 首元素 NEXT 做加法运算影响标志 Y SF=0? N DL←DL+1 AA1 BX←BX+1 CX←CX-1 CX=0? ? Y 存结果 结束 N
思考: 思考:
① 数据为字型 取出的数据放AX,地址指针+2 取出的数据放 ,地址指针 ② 判断一个数为负数的其他方法 与0比较 比较 移位 ③ 不用分支 在移位基础上,利用ADC处理负数个数 在移位基础上,利用 处理负数个数 ④ 自动计算数据个数作为循环次数 NUM EQU $-BUFF
BUFF DB 67H,9EH,-6AH,0ABH,6DH MEM DB ?
BX BUFF 67H 9EH -6AH 0ABH 6DH DL存放负数个数 存放负数个数 MEM ?
0000H 0001H 0002H 0003H 0004H 0005H
开始
BX
BUFF
67H 9EH -6AH 0ABH 6DH
习题1 习题
1.编写 编写8086汇编语言程序 , 将寄存器 的高 位传 汇编语言程序, 的高8位传 编写 汇编语言程序 将寄存器Байду номын сангаасX的高 送到寄存器BL, 位传送到寄存器DL 送到寄存器 ,低8位传送到寄存器 位传送到寄存器
习题2 习题
2.将寄存器 的内容从低到高位的顺序分成 组 , 将寄存器DX的内容从低到高位的顺序分成 将寄存器 的内容从低到高位的顺序分成4组 并将各组数分别送到寄存器AL,BL,CL和 DL( 如 并将各组数分别送到寄存器 和 ( DX=6D82H,分成:06H、0DH、08H、02H)。 ,分成: 、 、 、 )
• 使用说明
– a.子程序功能 – b.使用寄存器情况 – c.入口出口参数
• 程序体
– 入口出口参数传递 – 现场保护 – 功能程序段
;这是一个乘10子程序 ;使用寄存器AX ;入口:AX,出口:AX proc far push bx ;保护现场 pushf add ax,ax ;2ax mov bx,ax ;2ax bx add ax,ax ;4ax add ax,ax ;8ax add ax,bx ;10ax popf ;恢复现场 pop bx ret endp
MEM
?
DL存放负数个数 存放负数个数
START:MOV AX,DATA MOV DS,AX MOV CX,5 LEA BX,BUFF NEXT:MOV AL,[BX] ADD AL,0 JNS AA1 INC DL AA1: INC BX LOOP NEXT MOV MEM,DL MOV AH,4CH INT 21H CODE ENDS END START
习题3 习题
3.判断 判断MEM单元的数据, 编程将奇数存入 单元的数据, 判断 单元的数据 编程将奇数存入MEMA单 单 将偶数存入MEMB单元。 单元。 元,将偶数存入 单元
AX MEM MEMA MEMB ? ? ? ? ? ? 0000H 0001H 0002H
习题3 习题
DATA SEGMENT MEM DW ? MEMA DW ? MEMB DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA , START: MOV AX,DATA MOV DS,AX MOV AX,MEN SHR AX,1 JC PO_1 RCL AX,1 MOV MEMB,AX JMP DONE PO_1: RCL AX,1 : MOV MEMA,AX DONE: MOV AH,4CH INT 21H CODE ENDS END START
Call proc1 ret
实现方法 主程序有调用指令call 主程序有调用指令 子程序有返回指令ret 子程序有返回指令 特点 Call指令与 缺一不可 指令与ret缺一不可 指令与 现场保护 入口出口参数设置
举例 编写AX*10 AX子程序 子程序 编写
子程序编写 1.子程序组成 子程序组成
循环结构程序(续1)
AGIN: INC SI CMP BH,VAR[SI] JAE NEXT MOV BH,VAR[SI] NEXT: LOOP AGIN ;CX←CX-1,若CX不等于0则转 LAST: MOV AH,4CH INT 21H CSEG ENDS END BG 说明:这个例子的程序结构是顺序.分支.循环3种结构 的复合。
MOV AX,MEN MOV BX,AX SHR AX,1 JC PO_1 MOV MEMB,BX JMP DONE PO_1: MOV MEMA,BX : DONE:
习题4 习题
4.试统计 个数中偶数的个数,并将结果在屏幕显示 试统计9个数中偶数的个数 试统计 个数中偶数的个数,
SI BUFF 3BH 47H 8DH -75 0A4H 69H -2EH 0CCH 200 0000H 0001H 0002H 0003H 0004H 0005H 0006H 0007H 0008H
0000H 0001H 0002H 0003H 0004H 0005H
Y
AL
CX←循环次数 循环次数 BX←首元素地址 首元素地址 DL计数器清 计数器清0 计数器清 AL← 首元素 NEXT 做加法运算影响标志 SF=0? N DL←DL+1 AA1 BX←BX+1 CX←CX-1 CX=0? ? Y 存结果 结束 N
判断偶数/奇数的方法: 判断偶数 奇数的方法: 奇数的方法 移位 TEST——测试指令 测试指令 将结果在屏幕显示: 将结果在屏幕显示: 调用2号功能 调用 号功能
习题5 习题
5.试将一串 位无符号数加密 , 加密方法是每个数 试将一串16位无符号数加密 试将一串 位无符号数加密, 乘以2。 乘以 。
逻辑左移
CF
0 1 XXX XXXX 0 XXX XXXX
SHL AL,1 ADC DL,0
ADC指令实现 指令实现DL+CF+0 指令实现 如果是负数, 为 , 个数记录加1 如果是负数,CF为1,则DL个数记录加 个数记录加
DATA SEGMENT BUFF DW 6700H,9E00H,-6A00H,0A0BH,6D00H NUM DB $-BUFF MEM DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA , START:MOV AX,DATA MOV DS,AX MOV CX,NUM LEA BX,BUFF
【例4-1】编程统计 】编程统计BUFF缓冲区数据中负数的个数 缓冲区数据中负数的个数 DATA SEGMENT BUFF DB 67H,9EH,-6AH,0ABH,6DH MEM DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA ,
【例4-1】 】
【例】比较以存储变量D1和D2表示的两个有符号字 比较以存储变量 和 表示的两个有符号字 数据的大小,将其中较大数据放在BX寄存器中 寄存器中, 数据的大小,将其中较大数据放在 寄存器中, 程序如下: 程序如下:
BX D1 D2 DD FE E0 FE
DATA SEGMENT D1 DW -123H D2 DW -120H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA ,
举例
计算y= + + + 例1.计算 =0+2+4+……+1998 计算 + y dx ax 查找数组中是否由关键字, 查找数组中是否由关键字, 变量dd11;dd2关键字偏移量 有:变量 ; 无:变量dd10 变量 方法一.用 方法一 用loop指令 指令 方法二.用 方法二 用loopnz(loopne)指令 ( )
习题7 习题
7.统计 统计BLOCK1和BLOCK2两个单元数据中,对应位不同的有多少位。 两个单元数据中, 统计 和 两个单元数据中 对应位不同的有多少位。 DATA SEGMENT BLOCK1 DW ? BLOCK2 DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA , START:MOV AX,DATA MOV DS,AX MOV CX,16 XOR DL,DL LOP: XOR AX,AX XOR BX,BX SHL WORD PTR BLOCK1,1 RCR AX,1 SHL WORD PTR BLOCK2,1 RCR BX,1
习题7 习题
CMP AX,BX JE NEXT INC DL NEXT:LOOP LOP MOV AL,DL AAM MOV BX,AX ADD BX,3030H MOV AH,2 MOV DL,BH INT 21H MOV DL,BL MOV AH,2 INT 21H MOV AH,4CH INT 21H CODE ENDS END START
第四章 8086汇编语言程序设计习题 汇编语言程序设计习题
1.编写 编写8086汇编语言程序 , 将寄存器 的高 位传 汇编语言程序, 的高8位传 编写 汇编语言程序 将寄存器AX的高 送到寄存器BL, 位传送到寄存器DL。 送到寄存器 ,低8位传送到寄存器 。 位传送到寄存器 2.将寄存器 的内容从低到高位的顺序分成 组 , 将寄存器DX的内容从低到高位的顺序分成 将寄存器 的内容从低到高位的顺序分成4组 并将各组数分别送到寄存器AL,BL,CL和 DL( 如 并将各组数分别送到寄存器 和 ( DX=6D82H,分成:06H、0DH、08H、02H)。 ,分成: 、 、 、 ) 3.判断 判断MEM单元的数据, 编程将奇数存入MEMA单 单元的数据, 编程将奇数存入 单 判断 单元的数据 将偶数存入MEMB单元。 单元。 元,将偶数存入 单元 4.试统计 个数中偶数的个数,并将结果在屏幕显示 试统计9个数中偶数的个数 试统计 个数中偶数的个数, 。 5.试将一串 位无符号数加密, 加密方法是每个数 试将一串16位无符号数加密 , 试将一串 位无符号数加密 乘以2。 乘以 。
NEXT:MOV AX,[BX] SHL AX,1 ADC DL,0 INC BX INC BX LOOP NEXT MOV MEM,DL MOV AH,4CH INT 21H CODE ENDS END START
BX
BUFF
00H 67H 00H 9EH …
0000H 0001H 0002H 0003H 0004H 0005H
MEM
?
(1)示例1: 找出从无符号字节数据存储变量VAR开始存放的N个数中的 最大数放在BH中,程序如下: DSEG SEGMENT VAR DB 5,7,19H,23H,0A0H N EQU $-VAR DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG ;说明代码段.数据段 BG: MOV AX,DSEG MOV DS,AX ;给DS赋段值 MOV CX,N-1 ;置循环控制数 MOV SI,0 MOV BH,VAR[SI] ;取第1字节数到BH JCXZ LAST ;如果CX=0则转
习题9 习题
9.编写程序 , 将一串凌乱的字母从小到大的顺序排 编写程序, 编写程序 列。
MOV AX,MEMS 开始 OR AX,AX , AX←MEMS JE ZERO JNS PLUS Y AX=0? MOV BL,0FFH N JMP EXIT N ZERO:MOV BL,0 AX>0? JMP EXIT PLUS Y ZERO BL←01H BL←00H PLUS:MOV BL,1 BL←0FFH EXIT:MOV MEMD,BL EXIT MOV AH,4CH MEMD←BL INT 21H CODE ENDS 结束 END BIGEN
第四章 8086汇编语言程序设计习题 汇编语言程序设计习题
6.(略) ( 7.统计 统计BLOCK1和 BLOCK2两个单元数据中 , 对应 两个单元数据中, 统计 和 两个单元数据中 位不同的有多少位。 位不同的有多少位。 8. (略) 9.编写程序 , 将一串凌乱的字母从小到大的顺序排 编写程序, 编写程序 列。 10.编程统计寄存器 中,相邻位的变化次数。 编程统计寄存器AX中 相邻位的变化次数。 编程统计寄存器