微机原理与接口技术1-8习题解答王玉良 下载本文

器中为16位数据。

(4)CMP A1,A2错。两个操作数A1与A2不能同时为内存操作数。

(5)MOV [BX],1000错。两操作数类型不匹配,[BX]只定义了一字节单元,而1000是16位数据。

11.8086汇编语言程序中段的类型有几种?各段如何定义?段定义语句中,定位类型、组合类型、类别各起什么作用?各有什么含义?

解 8086汇编语言中,段的类型有三种,即代码段、堆栈段、数据段(附加数据段可归属于数据段)。各段可用段定义语句(SEGMENT与ENDS)和段名赋给段寄存器语句(ASSUME)来定义。段定义语句中,定位类型表示此段的起始边界要求,可允许4种段的起始边界,即PAGE、PARA、WORD或BYTE。它们分别表示段的起始值为以页、节、字、字节为边界,若此项省略,则默认值为PARA。组合类型用来告诉连接程序本段与其他段的关系,分别为NONE、PUBLIC、COMMON、AT表达式、STACK或MEMORY。每一种的含义请参看主教材。类别是连接程序(LINK)需要的。它可以是任何合法的名称,必须用单引号括起来,连接程序只使同类别的段发生关联。典型类别如‘CODE’、'STACK'。

12.使用DOS功能调用0AH从键盘输入40个字符的字符串并将其送入一输入缓冲区。在按下Enter键后,显示这些字符。

NAME KBDINPUT CODE SEGMENT

ASSUME CS:CODE,DS:CODE

ORG 100H

START:JMP BEGIN BUF

DB 41

NUMB DB ? CHARS DB 41 DUP(?)

MSG1 DB 'Type anything,followed by enter.',0DH,0AH,'$'

MSG2 DB 0DH,0AH,'Contents of the KBD input buf:',0DH,0AH,'$' BEGIN:MOV AX,CS

MOV DS,AX

MOV DX,OFFSET MSG1 MOV AH,9 INT 21H

MOV DX,OFFSET BUF MOV AH,0AH INT 21 H

MOV DX,OFFSET MSG2 MOV AH,9 INT 21H XOR BX,BX MOV BL,NUMB MOV CHARS[BX],'$' MOV DX,OFFSET CHARS

MOV AH,9 INT 21H MOV AH,4CH INT 21H CODE ENDS

END START

说明

本题把数据区放在代码段中,没有单独定义数据段。并且用ORG 100H语句把程序起始地址的偏移量放在100H开始的单元,用JMP BEGIN指令跳过数据区,这样可以把该程序经汇编、连接后的执行程序(.EXE)用EXE2BIN软件生成.COM文件。 或:

DATA BUF

SEGMENT DB 41

NUMB DB ? CHARS DB 41 DUP(?)

MSG1 DB 'Type anything,followed by enter.',0DH,0AH,'$'

MSG2 DB 0DH,0AH,'Contents of the KBD input buf:',0DH,0AH,'$' DATA

ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

MOV DS,AX

MOV DX,OFFSET MSG1 MOV AH,9 INT 21H

MOV DX,OFFSET BUF MOV AH,0AH INT 21 H

MOV DX,OFFSET MSG2 MOV AH,9 INT 21H XOR BX,BX MOV BL,NUMB MOV CHARS[BX],'$' MOV DX,OFFSET CHARS MOV AH,9 INT 21H MOV AH,4CH INT 21H CODE ENDS

13.某软件共可接收10个键盘命令(分别为A,B,C,…,J),完成这10个命令的程

END START