1、在ds段中有一个从table开始的由160个字符组成的链表,设计一个程序,实现对此表进行搜索,找到第一个非0元素后,将此单元和下一单元清0。
解: mov cx, seg table
mov ds, cx ;将段地址送ds
mov si, offset table ;表偏移量送si
mov cx, 160 ;字节数。
xoral, al
next: cmp al, [si]
jne exit1
inc si
loop next
exit1: mov [si], al
inc si
mov [si], al
2、试编写一个程序段,实现将bx中的数除以10,结果仍放在bx中。
解: mov cl,0ah
mov ax,bx
idiv cl
mov bx,ax
3、用串操作指令设计实现以下功能的程序段:首先将100h个数从2170h处搬到1000h处,然后,从中检索相等于al中字符的单元,并将此单元值换成空格符。
解: buff1 equ 1000h
buff2 equ 2170h
start: mov si,offset buff2
lea di,buff1
mov cx,100h
cycle: mov al,[si]
mov [di],al
inc si
inc di
loop cycle
another:mov di,offset buff1
mov cx,100
cldage: scasb
dec cx
jz fin
jnz age
jmp over
fin: mov [di],20h
cmp cx,0
jnz age
over: ret
4、用循环控制指令设计程序段,从60h 个元素中寻找一个最大值,结果放在al中。
解: mov si, offset data1 ; 将数据起始地址送si
mov cx, 5fh ; 有60h-1次循环。
mov al, [si] ;将第一个元素放al中。
compare: inc si
cmp al, [si]
jl xchmax
jmp next
xchmax: mov al, [si]
next: loop compare
5、编程序将一个存储块的内容复制到另一个存储块,进入存储段时,si中为源区起始地址的偏移量,di中为目的区起始地址的偏移量,cx中为复制的字节数。
解: cmp di, si ; 看源区和目的区的地址哪个高。
jbe lower ; 如目的区地址底,则转移。
std 如目的区地址高,则设方向标志为1
add si, cx ; 从最后一个字节开始复制。
dec si ; 调整源区地址。
add di, cx
dec di ; 调整目的区地址。
jmp movem
lower: cld ; 从第一个字节开始复制。
movem: rep movsb
6、编写程序实现对两个存储区中的字进行比较。如找到一对不同的字,则退出,此时 ,zf为0,di 指向此字;如两个存储区中所有的字都相同,则退出程序时,cx中值为0,zf为1。
解:matt: mov si, offset source ; 源区首址。
mov di, offset target ; 目的区首址。
mov cx, number
jcxz exit ; 如cx为0,则结束。
push cx ; 保存有关寄存器。
push si
push di
cld ; 清方向标志。
repe cmpsw
jz match ; 比较。
pushf ; zf为1,则转移。
sub di, 2 ; zf为0,则di指向次字。
popfjmp exit ; 推出。
match: pop di ; 恢复寄存器。
pop si
pop cx
exit: ret
7、编写程序实现在table 为起始地址的100个字符长度的表中检索“$"字符。
解:start: mov cx, seg table ; 表段地址送es
mov es, cx
mov di, offset table ; 表偏移量送di
mov al, '检索的关键字。
mov cx, 64h ; 检索的字节数。
push di ; 保存起始地址。
cld 清除方向标志。
repne scasb ; 检索。
jnz nfoun ; 如未找到,则转移。
sub di, 1 找到,则指向字符。
jmp exit
nfoun: pop di ; 恢复起始地址。
exit: ret
8、编写程序设计一个16位带符号数和32位带符号数相乘程序。(dx、ax)*cx->dx、cx、ax,为有符号数。
解:muls48: mov [1000], 0 ; 1000单元作为负数标志。
cmp dx, 0 ; 乘数为负数吗?
jns chkk ; 否,则转chkk
not ax ; 是,则取补码。
not dx
add ax, 1
adc dx, 0
not [1000] ;负数标志置1
chkk: cmp cx, 0 ; 乘数为负数吗?
jns gomul ; 否,则转gomul
not cx ; 是,则取补码。
add cx, 1
not [1000] ;将负数标志取反。
gonul: call mul48 ; 调用32位*16位无符号数乘法程序。
cmp [1000], 0 ; 结果为正数吗?
jz exit0 ; 是正数,则转移。
not ax ; 是负数,则取补码。
not cx
not dx
add ax, 1
adc cx, 0
adc dx, 0
exit0: ret
9、编写程序实现两个16位非组合bcd码的数相加。
解:anbcd: mov ch, ah ; 进入程序段时,ax中为第二个操作数。
add al, bl ; bx中为被加数,实现低8位相乘。
aaaxchg al, ch
adc al, bh ; 实现高8位相加。
aaamov ah, al ; 和保存在ax中。
mov al, ch
ret10、编写程序段设计一个实现16位非组合bcd码减法的程序。
解:subcd: mov ch, ah ; ax-bx->ax,为非组合bcd码。
sub al, bl
aasxchg al,ch
sbb al,bh
aasmov ah,al
mov al,ch
ret11、编写程序实现两个16位组合bcd码相减,进入程序时,bx中为减数,ax中为被减数,程序执行后,结果在ax中。
解:stasub: mov ch, ah ; 保存高8位。
sub al, bl ; 低8位相减。
das ; 十进制调整。
xchg al, ch
sbb al, bh ; 高8位相减。
dasmov ah, al ; 结果在ax中。
mov al, ch
ret12、编写程序实现两个16位组合bcd码相加。进入程序时,bx中为加数,ax中为被加数,程序执行后,结果在ax中。
解:staadd: mov ch, ah ; ax+bx->ax,为组合bcd码。
add al,bl
daaxchg al,ch
adc al,bh
daamov ah,al
mov al,ch
微机原理答案
1.串行通信与并行通信的主要区别是什么?各有优缺点?答 按信息的传送方式可将数据通信分为并行通信与串行通信两种 并行通信 是指利用多条数据传输线将一个数据的各位同时进行传送。特点 传输速度快,适用于短距离通信。串行通信 是指利用一条传输线将数据的各位一位位地顺序进行传送。串行通信又可分为异步通信和同...
微机原理答案
第3章 8086 8088指令系统与寻址方式习题。3 3 8086系统中,设ds 1000h,es 2000h,ss 1200h,bx 0300h,si 0200h,bp 0100h,var的偏移量为0600h,请指出下列指令的目标操作数的寻址方式,若目标操作数为存储器操作数,计算它们的物理地址。1...
微机原理A答案
安徽大学20 11 20 12 学年第 2 学期。微机原理及应用 a卷 考试试题参 及评分标准。一 单项选择题 每小题2分,共20分 1 a2 b 3 a4 c 5 c6 b 7 d8 c 9 c10 b 二 填空题 每空1分,共20分 10000011 ch,e896h,cf 1,of 0,zf ...