课后习题答案(4)

2020-06-05 09:24

32H 1

下面的程序段中有2LOOP1:MOV AL,[SI]

33H 2

SUB AL,30H

34H 3

MOV [SI],AL 1 4 INC SI DEC CX 2 5 JNE LOOP1 3 6

4 7 MOV AH,4CH

INT 21H

CODE ENDS END START

9. 条转移指令,计算它们的相对位移量并填在空缺的机器代码处。 1000:001B F3A6 REPZ CMPSB 1000:001D 75 01 JNZ 0020 1000:001F CB SAME: RET 1000:0020 41 FOUND:INC CX 1000:0021 890E0600 MOV [0006],CX 1000:0025 EB F8 JMP 001F

答:两处空缺的机器码分别为01H、0F8H。 简析:

JNZ指令采用相对寻址方式,本题程序中JNZ的目标地址是同一段中偏移量为0020H处,当前IP=001FH,故有:相对偏移量=目标地址-当前IP值=01H。

JMP指令有多种寻址方式,本题程序中的JMP为段内直接跳转,也采用相对寻址方式。因当前IP=0027H,目标地址为001FH,因此有:相对偏移量=目标地址-当前IP值=0F8H(-8的补码)。

10. 阅读下面的程序,填空。从BUF开始的11个单元中存放着11个整数,找出这11个数中正数并且是偶数的个数存入R中。 DATA SEGMENT BUF DB –2,5,-3,6,100,0,-20,-9,8,-110,21 N= ① R DW ? DATA ENDS CODE SEGMENT ② BEGIN:MOV AX,DATA ③ LEA BX,BUF MOV CX,N ④

变量

BUF→ BCD→

值 31H EA 0

- 16 -

CMP [BX],BYTE PTR 0 ⑤

TEST [BX],BYTE PTR 1 ⑥ INC AX INC BX DEC CX ⑦ MOV R,AX

MOV AH,4CH INT 21H CODE ENDS END ⑧ 答:

① $-BUF

② ASSUME CS:CODE,DS:DATA ③ MOV DS,AX ④ MOV AX,0 ⑤ JLE NEXT ⑥ JNZ NEXT ⑦ JNZ LOPA ⑧ BEGIN

11. 读下面程序,在其中的空处添上适当内容。该程序完成了什么功能?程序运行后,变量RS的值是多少? DATA SEGMENT BUF DB -13,24,5,-62,77,20,-7,145,0 CNT DB $ -BUF RS DB 0 DATA ENDS

STACK SEGMENT PARA STACK‘STACK’

DB 256 DUP(?)

STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START PROC FAR

PUSH DS

MOV AX,0 PUSH AX

LOPA: NEXT :

- 17 -

MOV AX,DATA MOV DS,AX LEA BX,BUF MOV CH,0 MOV CL, LP: MOV AL,[BX] TEST AL,80H JE CONT INC RS CONT:INC BX LOOP LP RET START ENDP CODE ENDS END START 答:程序空处可填CNT,字节变量RS的最后结果是04H。该程序实现的功能是:统计数据段中以BUF为首址的带符号字节数据表中负数的个数,CNT为表中所有数据的个数,即表的长度。需要注意的是:十进制数据“145”在以二进制带符号字节数据形式存放时相当于“-111”。

12. 已知在BUF的起始处保存有N个字符的ASCII码,编写汇编语言程序实现,将这组字符串传送到缓冲区BUFR中,并且使字符串的顺序与原来的顺序相反。

答:要传送的字符串有30个。 N=30

STACK SEGMENT STACK 'STACK' DW 100H DUP(?) TOP LABEL WORD STACK ENDS

DATA SEGMENT ASC1 DB 'abcdefghijklmnopqrstuvwxyz1234' ASC2 DB 30 DUP(?) DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:

MOV AX, DATA MOV DS, AX MOV ES, AX

- 18 -

MOV AX, STACK MOV SS, AX LEA SP, TOP MOV CX, N LEA SI, ASC1 ADD SI, CX LEA DI, ASC2 L1: DEC SI MOV AL, [SI] MOV [DI], AL INC DI LOOP L1

MOV AH, 4CH ;返回DOS MOV AL, 0 INT 21H

CODE ENDS END START

13. 编写一个完整的源程序,将数据35、-27、-13、6、-47、52、9、-3中的正数放入以BUFFER为首址的数据缓冲区中。

答:一种可能的程序如下实现:

DATA

SEGMENT

35,-27,-13,6,-47,52,9,-3 $-BLOCK

COUNT DUP(?)

BLOCK DB COUNT EQU BUFFER DB DATA STACK

STACK CODE

ENDS

SEGMENT PARA STACK‘STACK’ DW ENDS SEGMENT

ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK

AX,DATA DS,AX ES,AX CX,COUNT SI,BLOCK

;源数据区指针 ;正数存放区指针 ;自动增量

;取源数据,并修改SI

DI,BUFFER

;需用STOS串操作指令

MOV MOV MOV LEA LEA CLD

40 DUP(?)

BEGIN: MOV

AGAIN: LODSB

- 19 -

TEST JS

STOSB LOOP MOV INT ENDS

AL,80H GO

AGAIN AH,4CH 21H

;取符号位,不影响AL ;符号位=1,是负数,不存 ;存正数并修改DI ;退出循环,返回DOS

GO:

CODE

END BEGIN

14. 已知有一个长100个字的数据块,存放在以3DA0H:1000H开始的存储区域内。试编写一个完整的汇编语言程序,将该数据块复制到以3DA0H:1008H开始的存储区内。

答:一种可能的程序如下实现:

DATA

SEGMENT AT 3DA0H ORG 1000H

104 DUP(?)

ENDS

SEGMENT PARA STACK‘SSEG’ DB ENDS SEGMENT

ASSUME CS:CODE,SS:SSEG,DS:DATA,ES:DATA PROC PUSH MOV PUSH MOV MOV MOV MOV LEA ADD MOV ADD

STD REP RET ENDP ENDS END MAIN

FAR DS AX,0 AX

AX,SEG BLOCK DS,AX ES,AX CX,200 SI,BLOCK SI,199 DI,SI DI,8

MOVSB

;DI=10CFH ;自动减量

;SI=10C7H

;重复次数

100 DUP(?)

BLOCK DW DATA SSEG

SSEG CODE

MAIN

MAIN CODE

- 20 -


课后习题答案(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017-2022年中国装饰艺术玻璃行业运营格局分析及投资潜力研究预

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: