发布时间 : 星期五 文章汇编课后答案更新完毕开始阅读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。它们的格
式为: