汇编课后答案 联系客服

发布时间 : 星期五 文章汇编课后答案更新完毕开始阅读332257260722192e4536f632

〔习题3.23〕如何用指令代码代替.startup和.exit指令,使得例题3.1a能够在MASM 5.x下汇编通过?

〔解答〕 ;lt301a.asm(文件名)

.model small .stack .data

string db ?Hello,Everybody !?,0dh,0ah.?$?

.code start: mov ax ,@data

mov ds,ax mov dx,offset string

mov ah,9 int 21h mov ax ,4c00h

int 21h end start

〔习题3.24〕创建一个COM程序完成例题3.1的功能。

〔解答〕 ;lt301a,asm .model tiny .code .startup mov dx,offset string

mov ah,9 int 21h .exit 0

string db 'Hello,Everybody!'0dh,0ah,'$' ;

end

〔习题3.25〕按下面要求写一个简化段定义格式的源程序

(1) 定义常量num,其值为5;数据段中定义字数组变量datalist,它的头5个字单元中依次存放

-1、0、2、5和4,最后1个单元初值不定;

(2) 代码段中的程序将datalist中头num个数的累加和存入datalist的最后1个字单元中。

〔解答〕 .model small .stack .data num equ 5 datalist dw -1,0,2,5,4,?

.code .startup

mov bx,offset datalist

mov cx,num xor ax,ax

again: add ax,[bx]

inc bx inc bx loop again mov [bx],ax .exit 0 end

〔习题3.26〕按下面要求写一个完整段定义格式的源程序

(1)数据段从双字边界开始,其中定义一个100字节的数组,同时该段还作为附加段;

(2)堆栈段从节边界开始,组合类型为stack;

(3)代码段的类别是?code?,指定段寄存器对应的逻辑段;主程序指定从100h开始,给有关段寄存

器赋初值;将数组元素全部设置为64h。

〔解答〕

stack segment para ?stack?

dw 512 dup(?) stack ends data segment array db 100 dup(?)

data ends code segment ?code?

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

org 100h start: mov ax,data mov ds,ax mov es,ax mov di,offset array

mov al,64h mov cx,100

cld rep stosb mov ax,4c00h

int 21h code ends end start

〔习题3.27〕编制程序完成两个已知双精度数(4字节)A和B相加并将结果存入双精度变量单元SUM

中(不考虑溢出)。

〔解答〕 ;xt327.asm .model small

.stack 256 ;定义堆栈段大小为256个字节

.data

A dd 11223344h ;定义两个双字的数(随意)

B dd 77553311h

sum dd ? ;定义结果,执行后为:88776655h

.code .startup

xor si, si ;相对于变量的位移量清零 mov cx, 2 ;分高低字分别相加,共两次

clc ;清零cf

again: mov ax, word ptr A[si] ;取第一个数的一个字(先低字后高字) adc ax, word ptr B[si] ;取第二个数的一个字(先低字后高字) mov word ptr sum[si], ax ;存和的一个字(先低字后高字)

inc si ;修改位移量指向下一个字(加2)

inc si

loop again ;cx=cx-1 ,if cx<>0 ,jump again

.exit 0 end

〔习题3.28〕编制程序完成12H、45H、0F3H、6AH、20H、0FEH、90H、0C8H、57H和34H等10个

字节数据之和,并将结果存入字节变量SUM中(不考虑溢出)。

〔解答〕 .startup

xor si, si ;位移量清零 mov al, bdata[si] ;取第一个数 mov cx, num-1 ;累加次数 again: inc si ;指向下一个数

adc al, bdata[si] ;累加 loop again ;如未完,继续累加 mov sum, al ;完了,存结果

.exit 0 end

〔习题3.29〕结构数据类型如何说明、结构变量如何定义、结构字段如何引用?

〔解答〕

结构类型的说明使用一对伪指令STRUCT(MASM5.x是STRUC,功能相同)和ENDS。它们的格

式为: