第四章
课后习题
4.3 什么是指示性语句,它和指令有什么区别
指示性语言是指与CPU的指令直接对应的助记符
而指令是有汇编开发系统识别和处理的助记符前者是不被汇编开发系统处理的助记符.
4.4 画出下列语句的数据在存储器中的存储情况ARRAYB DB 12,34H,’ABCD’,2, DUP(?,2)
ARRAYB DW 1234H,’AB’,’CD’,?,2 DUP(?,2)
4.5 求DLENGTH的值是多少
DATA1DW?
DATA2DB32DUP(?)
DATA3DD?
DLENGTH EQU$-DATA1
解:DLENGTH=38=26H
4.6在某程序中需要为一个变量BUF预留500个字节的存储空间,请写出相应的指令,如果要预留500个字的存储空间呢?
解:
DATA1 DB 500 DUP(?)
ADTA2 DW 500 DUP(?)
4.7程序定义如下
BUFFERB DB‘ABCDEF’
RESULT DB?
BUFFERW DW30DUP(?)
写出运行结果:
MOV AX,TYPE RESULT;AX=1
MOV BX,TYPE BUFFERW;BX=2
MOV CX,LENGTH BUFFERB;CX=1
MOV DX,LENGTH BUFFERW;DX=30
MOV AX,SIZE RESULT;AX=1
MOV BX,SIZE BUFFERW;BX=60
4.9
LENG表示符号值等于2
4.11
设BX=1103H,则执行下列指令后AX和CX各为多少?若BX=03H,则结果又如何?
MOV AX,BX AND0FFH
MOV CX,BX EQ1103H
解:
BX=1103H
AX=0003H,CX=0FFFFH
BX=03H
AX=0003H,CX=0
4.12
MOV AX,X
SBB A,Y
MOV BX,10
IDIV BX
MOVBX,4
MUL BX
MOV Z,AX
4.14
XOR BX,BX
MOV CX,10
LOP:MOV AH,01H
INT21H
SUB AL,30H
MOV DL,AL
MOV AX,BX
ADD AL,DL
AAA
MOV BX,AX
LOOP LOP
4.17
4. 13. 设A,B是长度为10的字节数组,用串操作指令编写程序实现AB两数组内容的相互交换,试完善本程序。
DATA SEGMENT
A DB1,2,3,4,5,6,7,8,9,0AH
DRG OO10H
B DB 0AH,9,8,7,6,5,4,3,2,1
DATA ENDS
…
LEA SI,A
LEA DO,B
MOV CX,10
LOP:LODSB
XCHG AL,[DI]
DEC DI
STOSB
INC DI
LOOP LOP
解:
XCHG SI, DI
XCHG SI, D
4.18
将内存中某数据块的正数和负数分开,并分别将这些正数和负数送同一数据段的两个缓冲区中,并在屏幕上显示正数和负数的个数。
DATA SEGMENT
BUF DB 12,15,-2,3,-7,-8,19,-25
N=$-BUF
BUF1 DB N DUP(?) ;存放正数
BUF2 DB N DUP(?) ;存放负数
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
LEA BX,BUF ;BX指向BUF
LEA SI,BUF1 ;SI指向存放正数的缓冲区BUF1
LEA DI,BUF2 ;DI指向存放负数的缓冲区BUF2
MOV CX,N ;循环N次
MOV DX,0 ;DH表示负数的个数,DL表示正数的个数,都清零 CYCLE: MOV AL,[BX] ;将BX指向的数送给AL
CMP AL,0 ;比较AL与0的大小
JG GREAT ;AL>0,则转移至GREAT
MOV [DI],AL ;AL<=0,将AL存入负数的数组
INC DH ;负数的个数加1
INC DI ;DI指向下一个负数
JMP NEXT
GREAT: MOV [SI],AL ;AL>0,将AL存入正数的数组
INC DL ;正数的个数加1
INC SI ;SI指向下一个负数
NEXT: INC BX ;判断下一个数
LOOP CYCLE
ADD DL,30H ;将正数的个数变成字符输出
MOV AH,2
INT 21H
ADD DH,30H ;将负数的个数变成字符输出
MOV DL,DH
MOV AH,2
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
4.20
现有一子程序:
SUB1PROC
TEST AL,80H
JE PLUS
TEST BL,80H
JNE EXITO
JMP XCHANGE
PLUS:TEST BL,80H
JE EITO
XCHANGE:XCHG AL,BL
EWITO:RET
SUB1ENDP
试回答:
(1)子程序的功能是什么?
(2)如调用子程序前AL=9AH,BL=77H,那么返回主程序时,AL=?BL=?解:
(1) 测试AL, BL两数的符号,如为同号直接返回,如为异号,则AL与BL交换
(2) AL=77H, BL=9AH
4.21
作用
1、DOS键盘功能调用
2、DOS显示功能调用
3、DOS打印功能
4、DOS串行口通信功能调用
区别
bios是主板预装好的input、output系统,而dos是需要安装才能使用操作系统。用int条用中断以后可以通过不同的系统达到不同的目的和效果。其中int 1 -20 是bios中断,int21 专门用于dos 中断
4.24
ATA SEGMENT
NUMBER DB ?;存放统计数据,在程序退出以前可以在此看到统计数据,若对程序才算对
STR1 DB 'ASDAASZXCFGRSAAXADRRAT$';可以自己随便定义,注意以$结尾
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA;给数据段赋值
MOV DS,AX
LEA SI,STR1;字符串首地址
MOV BL,0;存放统计个数的寄存器赋初值LOOP1:
MOV CL,[SI];取数据
INC SI
CMP CL,'$';看是否是结尾
JE EXIT ;是,退出
CMP CL,'A' ;不是结尾,比较是否是‘A’
JNE NEXT ;不是'A'比较下一个
INC BL ;是,统计数加1
next: JMP LOOP1
EXIT:MOV NUMBER,BL;将统计数送往存储区