微机原理答案

发布 2022-09-04 21:29:28 阅读 2918

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 ...