汇编语言程序设计(第四版)第3章【课后答案】 联系客服

发布时间 : 星期一 文章汇编语言程序设计(第四版)第3章【课后答案】更新完毕开始阅读c074f7a3b80d4a7302768e9951e79b89680268be

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

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

(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

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

〔解答〕 ;

.model small

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

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

sum dd ;定义结果,执行后为:h .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

〔习题〕编制程序完成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

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

〔解答〕

结构类型的说明使用一对伪指令STRUCT(是STRUC,功能相同)和ENDS。它们的格式为: 结构名 STRUCT … ;数据定义语句 结构名 ENDS

结构变量定义的格式为: 变量名,结构名 〈字段初值表〉

引用结构字段,采用圆点“.”操作符,其格式是: 结构变量名.结构字段名。

〔习题〕记录数据类型如何说明,记录变量如何定义,width和mask操作符是什么作用

〔解答〕

记录类型的说明采用伪指令RECORD,它的格式为: 记录名 RECORD 位段[,位段…] 定义记录变量的格式:

记录变量名 记录名 〈段初值表〉

Width记录名/记录位段名操作符返回记录或记录位段所占用的位数。

mask记录位段名操作符返回一个8位或16位数值,其中对应该位段的个位为1,其余位为0。