第四章答案

  • 格式:doc
  • 大小:143.00 KB
  • 文档页数:9

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

4-1 假设下列指令中的所有标识符均为类型属性为字的变量,请指出下列指令中哪些是非法的?它们的错误是什么?

(1)MOV BP,AL ;非法,操作数类型不同

(2)MOV WORD_OP[BX+4*3][DI],SP ;合法

(3)MOV WORD_OP1,WORD_OP2 ;非法,不允许两个内存单元直接传递数据

(4)MOV AX,WORD_OP1[DX] ;合法

(5)MOV SA VE_WORD,DS ;合法

(6)MOV SP,SS:DA TA_WORD[BX][SI] ;合法

(7)MOV [BX][SI],2 ;非法,必须有一个寄存器

(8)MOV AX,WORD_OP1+WORD_OP2 ;非法,两个内存单元地址相加没有意义

(9)MOV AX,WORD_OP1-WORD_OP2+100 ;合法

(10)MOV WORD_OP1,WORD_OP1-WORD_OP2 ;非法,不允许两个内存单元直接传递数据

4-2 画图说明下列语句所分配的存储空间及初始化的数据值.

(1)BYTE_V AR DB 'BYTE',12,-12H,3 DUP(0,?,DUP(1,2),?)

(2)WORD_V AR DW 5 DUP(0,1,2),?,-5,'BY','TE',256H

4-3 试列出各种方法,使汇编程序把5150H存入一个存储器字中(例如:DW 5150H).

(1)DW 5150H

(2)MOV AX,5150H

MOV ADDRESS,AX

等,写出几个就可以

4-4 假设程序中的数据定义如下:

PARTNO DW ?

PNAME DB 16 DUP(?)

COUNT DD ?

PLENTH EQU $-PARTNO

问PLENTH的值为多少?它表示什么意义?

[解]:PLENTH 的值为22,GE表示该数据段的长度

4-5 试写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,2,5和4放在10字数组DATA_LIST的头5个单元中.然后,写出完整的代码段,其功能为:把DATA_LIST中头5个数中的最大值和最

小值分别存入MAX和MIN单元中.

[解]:源程序如下.

DATA_SEG SEGMENT

DB 5

DATA_LIST DW 0FFFFH,0,2,5,4, 5 DUP (?)

MAX DW ?

MIN DW ?

DATA_SEG ENDS

CODE_SEG SEGMENT

ASSUME CS:CODE_SEG,DS:DATA_SEG

START:

MOV AX,DA TA_SEG

MOV DS,AX

MOV AX,5

MOV MAX,AX

MOV AX,0FFFFH

MOV MIN,AX

CODE_SEG ENDS

END START

4-6对于下面的数据定义,三条MOV指令分别汇编成什么?(可用立即数方式表示)

TABLEA DW 10 DUP(?)

TABLEB DB 10 DUP(?)

TABLEC DB '1234'

......

MOV AX,LENGTH TABLEA

MOV BL,LENGTH TABLEB

MOV CL,LENGTH TABLEC

[解]:分别汇编成为:

MOV AX,0AH

MOV BL,0AH

MOV CL,1

4-7 对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?

FLDB DB ?

TABLEA DW 20 DUP(?)

TABLEB DB 'ABCD'

(1)MOV AX,TYPE FLDB ;(AX)=1

(2)MOV AX,TYPE TABLEA ;(AX)=2

(3)MOV CX,LENGTH TABLEA ;(CX)=14H

(4)MOV DX,SIZE TABLEA ;(DX)=28H

(5)MOV CX,LENGTH TABLEB ;(CX)=1]

4-8 按下面的要求写出程序的框架.

(1)数据段的位置从0E000H开始,数据段中定义一个100字节的数组,其类型属性既是字又是字节;

(2)堆栈段从小段开始,段组名为STACK;

(3)代码段中指定段寄存器,指定主程序从1000H开始,给有关段寄存器赋值;

(4)程序结束.

[解]:程序框架如下.

DATA_SEG SEGMENT

ORG 0E000H

FIRST_TYPE EQU THIS WORD

DATA_GROUP DB 100 DUP(?)

DATA_SEG ENDS

STACK_SEG SEGMENT

ALIGN 16

STACK DB 100 DUP (?)

STACK_SEG ENDS ;

CODE_SEG SEGMENT

ASSUME CS:CODE_SEG ,DS:DATA_SEG ,SS:STACK_SEG

ORG 1000H

START:

MOV AX,DA TA_SEG

MOV DS,AX

MOV AX,STACK_SEG

MOV SS,AX

.......

CODE_SEG ENDS

END START

4-9 请说明表示程序结束的伪操作和结束程序执行的语句之间的差别.它们在源程序中应如何表示? [解]:表示程序结束的伪操作是由系统所执行,并且在操作系统的控制下自动完成,

如:MOV AX,4C00H INT 21H等;而结束程序执行的语句除了以上这些以外,还可以是其它非正常终止的指令,如HALT,EXIT等.

4-10 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。

BEGIN: MOV AH, 1

INT 21H

CMP AL, ‘a’

JB STOP

CMP AL,’z’

JA STOP

SUB AL, 20H

MOV DL, AL

MOV AH, 2

INT 21H

JMP BEGIN

STOP: RET

4-11 试编写一个程序,要求能从键盘接收一个个位数,然后响铃N次(响铃的ASCII码为07)。BEGIN:MOV AH, 1

INT 21H

AND AL, 0FH

CBW