微机原理及应用教材课后习题及答案 下载本文

⑴1000大于字节变量所能表示的范围

mov byte ptr [BX],5

表示的意思是把5以字节的形式传送给DS:BX,

1000超过了0ffh,也就是大于1个字节,所以无法传送会出现 error A2050: Value out of range(值超出范围)

数据类型不匹配,目的地址单元是字节单元,1000大于255。无法存放。

⑵OFFSET只能用于简单变量

OFFSET后只能跟标识符。

9 / 27

⑶双操作数不能同时为存储器操作数

CMP的两个操作数不能同时在存储器中。

⑷数值表达式应为运算符加常量

运算符只能对常数进行操作,不能对变量进行操作。

10 / 27

⑸两操作数类型不一致

数据类型不匹配,AL是8位的,MYWORD是16位变量。

⑹条件跳转只能是短跳转

MYWORD是变量,其指的单元中存放的是操作数,不能用做跳转入口。

3.17已知用于LED数码管的显示代码表为:

LEDtable db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h db 80h,90h,88h,83h,0c6h,0c1h,86h,8eh

它依次表示0~9,A~F这16个数码的显示代码。现编写一个程序实现将lednum中的一个数字(0~9、A~F)转换成对应的LED显示代码。 答:

stack segment stack db 100h dup(?) stack ends

data segment

11 / 27

ledtable db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h db 80h,90h,88h,83h,0c6h,0c1h,86h,8eh lednum db 3 data ends

code segment 'code'

assume cs:code,ss:stack,ds:data start:

mov ax,data mov ds,ax

lea bx,ledtable mov al,lednum xlat

mov ax,4c00h int 21h code ends end start

解析:stack 段是缺省的堆栈段时写成 stack segment para stack'stack' 比较简单省事儿,因为这样链接程序会自动设置 exe 可执行文件里初始堆栈指针,程序里就不用自己进行设置了。如果没有最后的那个 'stack' 说明项,就需要自己设置 ss:sp 。'stack'是类别名。

把我定义的stack segment关联到栈,省去了assume ss:stack对么,所以我可以写成stack segment stack.

3.18编制一个程序,把变量bufX和bufY中较大者存入bufZ;若两者相等,则把其中之一存入bufZ中。假设变量存放的是8位有符号数。 答:

data segment x db 13 y db -3 z db ? data ends

stack segment stack db 100 dup(?) stack ends

code segment 'code'

assume cs:code, ds:data, ss:stack start:

mov ax,data mov ds,ax

12 / 27