汇编语言程序设计教程(第二版)卜艳萍著 下载本文

MOV WORD PTR[BX],50H

(2)请编写指令将数据FFH传送给数据为0的单元。 ADD BX,4

MOV WORD PTR[BX],FFH

7. 下面是一个数据段的定义,请用图表示它们在内存中存放的形式。 DATA SEGMENT

A1 DB 25H,35H,45H A2 DB 3 DUP(5) A3 DW 200,3AB6H A4 DW 3000H,6A6FH DATA ENDS

A1 25H

35H 45H A2 05H 05H 05H A3 00H 02H B6H 3AH A4 00H 30H 6FH

6AH

8. 说明下列语句所分配的存储空间及初始化的数据值。

(1)BYTE_VAR DB ‘BYTE’,21,-42H,3 DUP(0,?,2 DUP(2,3),?) (2)WORD_VAR DW 5 DUP(4,2,0),?,-8,‘BY’,‘TE’256H

BYTE_VAR 42H WORD_VAR 04H 59H 00H

54H 02H 45H 00H 15H 00H 10111110B 00H 0 04H — 00H 2 02H 3 00H 2 00H 3 00H — 04H

0

00H 13

— 2 3 2 3 — 0 — 2 3 2 3 —

02H 00H 00H 00H 04H 00H 02H 00H 00H 00H 04H 00H 02H 00H 00H 00H — — 11111000B 11111111B 42H 59H 54H 45H 56H 02H

9. 在下列数据传送程序段中有些使用不当的语句,请改正之。 A DB 10H,20H,‘OPQ’,4FH B DB N DUP(?) ;改为B DB 6 DUP(?)

MOV DI,A ;改为MOV DI,OFFSET A MOV SI,B ;改为MOV SI,OFFSET B

MOV CX,LENGTH A ;改为MOV CX,LENGTH B CC: MOV AX,[DI]

MOV [SI],AX

INC SI

INC DI

DEC CX ;去掉该句 LOOP CC

10. 以下程序段落拟实现在同一个段内的调用过程,试判断可行性,如不能实现,请改

正。 CODE SEGMENT

14

ASSUME CS:CODE BEGIN:

┇ CALL SUB1 ┇ CALL SUB2 ┇ SUB1 PROC FAR MOV AX,X MOV BX,Y MUL BX RET SUB1 ENDP CODE ENDS

END START

SUB1应为NEAR型,过程SUB2并未定义,应定义SUB2。程序段落改为:CODE SEGMENT

ASSUME CS:CODE BEGIN: ┇ CALL SUB1 ┇ CALL SUB2 ┇ SUB1 PROC NEAR MOV AX,X MOV BX,Y MUL BX RET SUB1 ENDP SUB2 PROC NEAR ?? RET SUB2 ENDP

CODE ENDS

END BEGIN

11. 有一个数据段定义了如下6个变量,请写出该数据段。 (1)BUF1为十进制数字节变量:64; (2)BUF2为字符串变量:‘Teacher’; (3)BUF3为十六进制数字节变量:2FH; (4)BUF4为双字变量:657AH; (5)BUF5为字变量:657AH;

(6)BUF6为二进制数字节变量:10101101B。

15

DATA SEGMENT BUF1 DB 64

BUF2 DB ‘Teacher’ BUF3 DB 2FH BUF4 DD 657AH BUF5 DW 657AH BUF6 DB 10101101B

第5章 高级汇编技术

1. 何谓宏指令?宏指令在程序中如何被调用?宏指令定义和子程序有什么区别?

在编写程序过程中,若遇到一些要多次使用的程序段,为了简化程序,通常采用定义子程序的方法,同样,也可以采用宏定义的方法来达到这个目的。宏定义是源程序中一段有独立功能的程序代码。但必须先将这一段程序定义为一条宏指令,并具有一个相应的宏指令名,在程序中就可以多次调用它,调用时只需要引用一个宏指令名来代替这一段程序就可以了。

宏定义:

格式为:宏名 MACRO [形参表]

┇ (宏体)

ENDM

子程序定义:

格式为:过程名 PROC [类型]

┇ (过程体)

过程名 ENDP

2. 结构数据类型如何说明?结构变量如何定义?结构字段如何引用?

定义结构的格式为: 结构名 STRUC

[字段名] (数据类型定义语句) ┇ 结构名 ENDS

定义结构变量:

结构变量名 结构名 〈字段值表〉

引用结构变量的一般格式为: 结构变量名

引用结构变量的字段的一般格式为: 结构变量名﹒字段名

3. 试述宏指令与子程序的区别。

宏与子程序有本质的区别,主要反映在调用方式、传递参数和使用细节上。

子程序和宏定义都可以节省存储空间及程序设计所花的时间,可提供模块化程序设计的条件,便于程序的调试及修改等。但是在子程序结构中,为转子程序和返回、保存及恢复寄存器以及参数的传递等操作都要增加程序的开销,这些操作所消耗的时间以及它们所占用的存储空间,都是为取得子程序结构使程序模块化的优点而增加的额外开销。因此,在子程序本身较短或者是需要传递的参数较多的情况下使用宏汇编技术。

16