好文档 - 专业文书写作范文服务资料分享网站

新版汇编语言程序设计习题答案(钱晓捷主编)电子教案

天下 分享 时间: 加入收藏 我要投稿 点赞

偏移地址:表示标号所在代码段的段内偏移地址;

类型:引用该标号时,表示它所在同一个段near类型,还是另外一个段far类型。 3.19; 设在某个程序中有如下片段,请写出每条传送指令执行后寄存器AX的内容: mydata segment ORG lO0h VARW DW l234H,5678H VARB DB 3,4

AGLIN 4 VARD DD 12345678H EVEN BUFF DB 10 DUP(?) MESS DB ’HELLO’

MOV AX, OFFSET VARB + OFFSET MESS ;AX = 4+16H = 1AH MOV AX, TYFE TYPE BUFF+TYPE MESS+TYPE VARD;AX = 1+1+4 = 06H MOV AX,SIZE VARW+SIZE BUFF+SIZE MESS;AX = 4+10+5 = 19 = 13H MOV AX,LENGTH VARW + LENGTH VARD ;AX = 2+1 = 03H MOV AX,LENGTH BUFF + SIZE VARW ;AX = 10+4 =14 = 0EH MOV AX,TYPE BIGIN ;AX = FF02H (近)

MOV AX,OFFSET BEGIN ;AX = 1BH 3.20、利用简化段定义格式,必须具有.MODEL语句。MASM定义了哪7种存储模式,TINY和SMALL模式创建什么类型(EXE或COM)程序?设计32位程序应该采用什么模式?

3.21、源程序中如何指明执行的起始点?源程序应该采用哪个DOS功能调用,实现程序返回DOS?

3.22; 在SMALL存储模式下,简化段定义格式的代码段、数据段和堆栈段的缺省段名、定位、组合以及类别属性分别是什么? 段定义伪指令 段名 定位 组合 类别 组名 .CODE _TEXT WORD PUBLIC ’CODE’

.DATA _DATA WORD PUBLIC ’DATA’ DGROUP .STACK STACK PARA STACK ’STACK’ DGROUP

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

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

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

dword 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

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

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

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

again:mov ax, anum[si] ;取第一个数的一个字(先低字后高字)

adc ax, bnum[si] ;取第二个数的一个字(先低字后高字) mov 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、结构数据类型如何说明、结构变量如何定义、结构字段如何引用?

3.30、记录数据类型如何说明,记录变量如何定义,width和mask操作符是什么作用?

第四章 基本汇编语言程序设计

4.1、例题4.2如果要求算术右移8位,如何修改程序。

4.2、例题4.2如果要求算术左移7位,如何用移位指令实现。

4.3; 思路:设这四组从低位到高位分别放在AL、BL、CL和DL寄存器中。这里仅列出代码段:

mov bl, al ;将al中的两组分开 and al, 0fh ;屏蔽高四位后送al

mov cl, 4 ;原al中的数据逻辑右移4次送bl shr bl, cl

mov dl, ah ;将ah中的两组分开 and dl, 0f0h ;屏蔽低高四位后送dl

mov cl, 4 ;原ah中的数据逻辑右移4次送dl shr dl, cl

mov cl, ah ;屏蔽高四位后送cl and cl, 0fh

4.4; getkey: mov ah, 1 ;从键盘输入,出口:al存键值 int 21h

cmp al, ’a’ ;判键值是小写字母? jb getkay cmp al, ’z’ ja getkay

sub al,20h ;是小写字母转换为大写字母 mov ah, 09h ;显示 int 21h

4.8; (1) 将jmp table[bx]指令改为:mov dx, table[bx] (2) 去掉源程序中:.exit 0---end之间的语句 4.17; .model small .stack 256 .data

stri1 db ’please input number:1--9’,odh,oah,’$’ .code .startup

again: mov dx,offset stri1 ;显示stri1,提示输入 mov ah,09h int 21h

mov ah,01h ;调用输入一个字符 int 21h ;输入一个字符存在al中 cmp al, ’1’ ;判该字符,如不在‘1’--‘9’ jb again ;重新输入 cmp al, ’9’ ja again

新版汇编语言程序设计习题答案(钱晓捷主编)电子教案

偏移地址:表示标号所在代码段的段内偏移地址;类型:引用该标号时,表示它所在同一个段near类型,还是另外一个段far类型。3.19;设在某个程序中有如下片段,请写出每条传送指令执行后寄存器AX的内容:mydatasegmentORGlO0hVARWDWl234H,5678HVARBDB3,4
推荐度:
点击下载文档文档为doc格式
0a80k7c1bk44p5c1cp2i5zpak1cslt00da3
领取福利

微信扫码领取福利

微信扫码分享