第3章 部分习题参考答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第3章课后习题参考答案

3-1 写出执行下列程序段的中间结果和结果

(1)MOV AX, 0809H

MUL AH ;AX=AL*AH=48H

AAM ;AX=0702H

(2)题目略

●AX=0059H

(BCD除之前,先用AAD是将BCD数先转换为二进制<十六进制>数,非压缩BCD码0809H表示的数值89,转换为十六进制数为59H)

●DIV DL ;AX=0411H ;商89/5=17=11H保存在AL,余数=4保存在AH,故AX=411H

MOV DL,AH ;余数送DL,DL=04H

●AAM ;乘法调整,将AL中的二进制转换为非压缩BCD码→AX,AX=0107H,;

;最后AX=0107和,DL=04H

(3) AX=0011H, AX=0107H

(4) AX=005AH(MUL AH; AL=09,AH=10=0Ah,9*0AH=5AH),

AX=0900H(调整后变为BCD数,5AH=90),

AX=0908H(xchg AH,DL将AH中的08H交换到DL,执行ADD AL,DL,AL=00+08=08H,故AX=0908H)(5) AL=62H

(6) AX=0248H (该程序段:将AX先初始化为0,然后将CL的最高位移到进位位C,利用字节加法分两次进行AX*2+C,并进行压缩的BCD加法调整,分析代码可知该段代码是将CL中的二进制数转换为BCD码并保存在AX中。程序代码 MOV CL ,248经汇编,CL中存放的是十进制数248对应的二进制数CL=11111000B,因此程序执行完毕,AX=0248H)

3-2 题目略

一个压缩的BCD数, 0~99. 转换方法:十位*10+个位。

stack segment stack 'stack'

dw 32 dup(0)

stack ends

data segment

BVAR DB 99H

data ends

code segment

assume ss: stack , cs: code, ds: data

BEGIN: MOV AX, DATA ; 将数据段首地址送AX

MOV DS,AX ; 将数据段首地址送DS

MOV AL, BVAR ;取出待转换BCD数

MOV CL, 4

SHR AL, CL ;右移4位,得到BCD数的十位(右移时,高四位补0)

MOV AH, 10 ;

MUL AH ;十位数*10

AND BVAR, 0FH ;BCD数高四位清0,得到个位数

第 1 页共 24 页 1

ADD BVAR, AL ;加个位数,得到转换结果,直接存放到BVAR存储单元

MOV AH,4CH ;返回操作系统的功能编号

INT 21H ;执行操作系统功能调用,当AH=4cH时,返回操作系统CODE ENDS

END

3-3 题目略

stack segment stack 'stack'

dw 32 dup(0)

stack ends

data segment

W1 DW 0807H

W2 DW 0609H

B3 DB 2 DUP(0)

data ends

code segment

assume ss:stack,cs:code,ds:data

START: MOV AX,DATA

MOV DS,AX

MOV AX, W1 ;AX=0807H

SUB AL,BYTE PTR W2 ;AL=FEH, CF=1

AAS ;AL=08H, AH=07H

MOV B3, AL

MOV AL,AH

SUB AL,W2+1

MOV B3+1,AL

MOV AH,4CH

INT 21H

CODE ENDS

END

3-4 题目略

使用另一种返回操作系统的方法:在对汇编源程序进行汇编/链接生成可执行的.EXE程序时,操作系统自动在数据段最开始DS:0000H处放置一条返回操作系统的指令,因此,只要将DS和0000压入堆栈,并将程序编写为远过程(远调用的子程序),然后在执行完程序规定的功能后,在程序的最后用一条RET指令,RET自动将DS弹出送到CS,将0000弹出送到IP,就会转到数据段开始执行返回操作系统的指令,使程序能够返回操作系统。

stack segment stack 'stack'

dw 32 dup(0)

stack ends

data segment

D1 DD 06070809H

D2 DD 04050607H

OBF DB 6 DUP(0)

data ends

code segment

2

第 2 页共 24 页

begin proc far ;远过程,返回时,从堆栈弹出四字节送CS:IP

assume ss:stack,cs:code,ds:data

PUSH DS ;压栈DS

SUB AX,AX ;ax=0

PUSH AX ;0000压入堆栈

MOV AX,DATA

MOV DS,AX ;数据段段基址 DS

MOV SI,0

MOV DI,OFFSET OBF+5

MOV BYTE PTR[DI],'$'

MOV CX,4

XOR AH,AH

AGAIN: MOV AL, BYTE PTR D1[SI]

ADD AL, BYTE PTR D2[SI]

ADD AL,AH

MOV AH,0

AAA

ADD AL,30H

DEC DI

MOV [DI],AL

INC SI

LOOP AGAIN

AND AH,AH

JZ N5

DEC DI

MOV BYTE PTR[DI],'1'

N5: MOV DX,DI

MOV AH,9

INT 21H

ret

begin endp

code ends

end begin

3-5 题目略

stack segment stack 'stack'

dw 32 dup(0)

stack ends

data segment

W1 DW 8931H

W2 DW 5678H

OBF DB 6 DUP(0)

data ends

code segment

begin proc far

assume ss:stack,cs:code,ds:data

push ds

sub ax,ax

push ax

第 3 页共 24 页 3

相关文档
最新文档