内容发布更新时间 : 2024/12/22 17:21:27星期一 下面是文章的全部内容请认真阅读。
学习-----好资料
20. 编写程序段,把内存中首地址为MEM1的200个字节送到首地址为MEM2的区域。
解: MOV AX,SEG MEM1
MOV DS,AX ;设定源串段地址 MOV AX,SEG MEM2 MOV ES,AX ;设定目标串段地址 MOV SI,0 ;设定源串偏移地址 MOV DI,0 ;设定目标串偏移地址 MOV CX,200 ;串长度送CX CLD ;(DF)=0,使地址指针按增量方向修改 REP MOVSB ;每次传送一个字节,并自动 HLT
21. 编写程序段,以4000H为起始地址的32个单元中存有32个有符号数,统计其中负数的个数,并将统计结果保存在BUFFER单元中。 解:START: MOV DI,OFFSET BUFFER
XOR AL,AL MOV [DI],AL MOV SI,4000H MOV CX,32 AA: MOV AL,[SI] OR AL,AL JNS X1 INC [DI] X1: INC SI NEXT:LOOP AA HLT
更多精品文档
学习-----好资料
第四章习题及答案
1. 什么叫汇编?汇编语言源程序的处理过程是什么?
解:任何CPU都只能执行机器语言程序。汇编语言不是机器语言,汇编语言程序必须通过具有“翻译”功能的系统程序的处理,处理的过程称为汇编。
汇编语言源程序经过汇编生成机器语言目标程序,简称目标程序。目标程序经过连接程序连接,就得到可执行的机器语言程序文件。
2. 汇编语言的语句类型有哪些?各有什么特点?
解:汇编语言的语句类型有两种:指示性语句和指令性语句。指示性语句可以位于任何段中,指令性语句必须位于代码段内。 ? 指示性语句
又称为伪操作语句,它不是8088/8086CPU的指令,它与汇编程序(assembler)有关。指示性语句的功能主要是变量定义、为数据分配存储空间、告诉汇编程序如何对源程序汇编等。源程序汇编后指示性语句不生成目标代码,所以常被称为伪指令。 ? 指令性语句
指令性语句是可执行语句,是8088/8086CPU的指令。源程序汇编后指令性语句生成目标代码。第3章中介绍的所有指令都是指令性语句的主体,其操作数最多只能有两个。
3. 汇编语言源程序的基本结构是什么?
解:汇编语言源程序由若干段组成:数据段、附件数据段、堆栈段和代码段等,段与段之间的顺序可以随意排列,每一段由SEGMENT开始,以ENDS结束,每段的开始和结束都附有相同的名字。一个程序一般定义三个段:数据段、堆栈段和代码段,必要时增加定义附加数据段,能独立运行的程序至少包含一个代码段。
4. 写出完成下述要求的变量定义的语句:
(1) 为缓冲区BUFF保留200个字节的内存空间 (2) 将字符串’BYTE’,’WORD’存放于某数据区
(3) 在数据区中存入下列5个数据:2040H,0300H,10H,0020H,1048H 解:
(1)为缓冲区BUFF保留200个字节的内存空间
BUFF DB 200 DUP(?)
(2)将字符串’BYTE’,’WORD’存放于某数据区
DB ‘BYTE’,’WORD’
(3)在数据区中存入下列5个数据:2040H,0300H,10H,0020H,1048H DW 2040H,0300H,10H,0020H,1048H
更多精品文档
学习-----好资料
5. 画出下面数据段汇编后的内存图,并标出变量的位置。 DATA SEGMENT
AA EQU 78H
AA0 DB 09H,-2,45H,2 DUP(01H, ?),’AB’ AA1 DW -2,34H+AA
AA2 DD 12H ;双字类型
DATA ENDS
解:如图所示。
6. 设程序中的数据定义如下:
NAME DB 30 DUP(?) LIST DB 1,8,3,2 ADDR DW 30 DUP(?) (1) 取NAME的偏移地址放入SI (2) 取LIST的前两个字节存入AX (3) 取LIST实际长度
解:(1)取NAME的偏移地址放入SI
MOV SI,OFFSET NAME
(2)取LIST的前两个字节存入AX
MOV AX,WORD PTR [LIST]
(3)取LIST实际长度
MOV AX,SIZE LIST ;P85
7. 依据下列指示性语句,求表达式的值。
SHOW0 EQU 200 SHOW1 EQU 15 SHOW2 EQU 2 ⑴ SHOW0X100+55 ⑵ SHOW0 AND SHOW1-15 ⑶ (SHOW0/SHOW2) MOD SHOW1 ⑷ SHOW1 OR SHOW0 解:(1) SHOW0 X 100+55=200X100+55
⑵ SHOW0 AND SHOW1-15=C8H AND 0FH - 0FH = 0;减法的优先级过于AND ⑶ (SHOW0/SHOW2)MOD SHOW1=100 MOD 15=10 ⑷ SHOW1 OR SHOW0=0FH OR C8H=CF
8. 编写程序,统计寄存器BX中二进制位“1”的个数,结果存在AL中。
DATA SEGMENT
NUM DW ? DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX MOV AL,0
AA009HFEH45H01H?H01H?41H42HAA1FEHFFHACH00HAA012H00H00H00H更多精品文档
学习-----好资料
MOV BX,NUM ;把数X传送给BX MOV CX,16
NEXT: SHL AX,1
JNC NEXT1 INC AL
NEXT1: LOOP NEXT
MOV AH,4CH
INT 21H
CODE ENDS
END START
9. 某数据块存放在BUFFER开始的100个字节单元中,试编写程序统计数据块中正
数(不包括0)的个数,并将统计的结果存放到NUMBER单元中。 解DATA SEGMENT
BUFFER DB 100(?) NUMBER DB 0
DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX XOR DX, DX
MOV CX,100 MOV SI,OFFSET BUFFER NEXT: MOV AL,[SI] INC SI TEST AL,80H ;是正数吗? JNZ GOON ;否,转移到GOON CMP AL,0 JZ GOON
INC DX
GOON: LOOP NEXT MOV NUMBER,DX
MOV AH,4CH INT 21H
CODE ENDS
END START
10. 阅读下面程序段,指出它的功能。 DATA SEGMENT
ASCII DB 30H, 31H, 32H, 33H ,34H ,35H, 36H, 37H, 38H, 39H HEX DB 04H DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS: DATA START: MOV AX, DATA
更多精品文档
学习-----好资料
MOV DS, AX
MOV BX,OFFSET ASCII MOV AL,HEX AND AL,0FH MOV AL,[BX+AL] MOV DL,AL MOV AH,2 INT 21H
MOV AH,4CH INT 21H
CODE ENDS END START
解:这时一个查表程序,查表取出HEX的ASCII。并在屏幕上显示ASCII码
11. 某数据区中有100个小写字母,编程把它们转换成大写字母,并在屏幕上显示。
解:DATA SEGMENT
BUFFER DB 100(?)
DATA ENDS
CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX
MOV CX,100 MOV SI,OFFSET BUFFER NEXT: MOV AL,[SI] INC SI CMP AL,61H ;是小写字母吗? JB GOON ;否,转移到GOON(小于则转移) SUB AL,20H MOV DL,AL MOV AH,2 INT 21H GOON: LOOP NEXT MOV AH,4CH
INT 21H
CODE ENDS END START
12. 子程序的参数传递有哪些方法? 解:
主程序在调用子程序时,要为子程序预置数据,在子程序返回时给出数据处理的结果,这称为数据传送或变量传送。方法主要有以下几种:
① 寄存器传送。
更多精品文档