汇编作业题答案

发布 2023-05-21 09:19:28 阅读 9277

1 已知8086系统某存储单元物理地址为12345h,写出4个可以与它对应的“逻辑地址”。

1234h:0005h, 1230h:0045h, 1220h:0145h, 1224h:0105h, …

2 已知8086系统某存储单元物理地址为12345h,可以与它对应的“逻辑地址”中,段基址最大值,最小值分别是多少?

答:可以与物理地址12345h对应的逻辑地址中,段基址的最大值为1234h,最小值为0235h。

分析:偏移地址取最大值时,对应的段基址为最小。偏移地址可选的最大值为0fff5h(最后一位必须为5),因此最小的段基址=(12345h-0fff5h)/10h=0235h。

偏移地址取最小值时,对应的段基址最大。偏移地址可选的最小值为0005h(最后一位必须为5),因此最大的段基址=(12345h-0005h)/10h=1234h。

3 8086微机最多可以有多少个不同的“段基址”?为什么?

答:由于段基址由16位二进制数表示,因此可以有216=65536个不同的段基址。

4 某数据段内有如下数据定义:

x db 30, 30h, ‘abc’, 2-3, ?11001010b

dw 0ffh,-2, “cd”

y dd 20 dup(15, 3 dup(?)0)

z db 3 dup(?)

w dw z-x

假设变量x的偏移地址为20h。

1) 按照图2-1的格式写出变量x各数据在内存中的具体位置和相关内存单元的值。

2) 写出变量y,z的偏移地址。

3) 写出变量w的值。

答:(1)变量x各数据在内存中的具体位置和相关内存单元的值如右图。

2) 变量y的偏移地址为002eh;

变量z的偏移地址为002eh+4×5×20=01beh

3) 变量w的值等于变量z和x偏移地址之差。

01beh-0020h=019eh

它等于变量x、y所占用内存单元的字节数。

5 下列指令的源操作数段基址在哪个段寄存器中?

(1)mov ax, [bp][si2)mov ax, cs:8[di]

(3)mov ax, 2[ebp*14)mov ax, fs:4[esp]

(5)mov ax, 2[ebp][eax] (6)mov ax, [ecx][ebp*4]

(7)moc ax, [edx][ebp] (8)mov ax, es:10[ebp][eax*2]

答:各指令源操作数段基址使用的段寄存器如下:

(1) ss (2) cs (3) ss (4) fs

(5) ss (6) ds (7) ds (8) es

6 判断下列指令是否正确。若不正确,指出错误原因。

(1)mov ax, [ebx2)mov si, dl

(3)mov ebp, [esp][eax*3](4)lea ax, 3006h

(5)mov [bp][di], 0 (6)mov [si], di]

(7)mov es, 1000h (8)mov ax, x+2

(9)mov ax, cx+2 (10)mov [eax][eax*2], al

答: (1)指令mov ax, [ebx] 是正确的。

2)指令mov si, dl是错误的,两个操作数类型不匹配。

(3)指令mov ebp, [esp][eax*3] 是错误的,比例因子不能为3。

4)指令lea ax, 3006h是错误的,lea指令的源操作数必须为内存操作数。

(5)指令mov [bp][di], 0是错误的,操作数类型无法确定。

6)指令mov [si], di] 是错误的,不能同时出现两个内存操作数。

(7)指令mov es, 1000h是错误的,装载段寄存器时,源操作数不能为立即数。

8)如果“x”是用常数表达式定义的符号(例如:x equ 5+6),或者是用“dw”定义的内存变量,指令mov ax, x+2是正确的。否则这条指令是错误的。

(9)指令mov ax, cx+2是错误的,源操作数表达式cx+2不是一个可以直接计算的“常数表达式”。

10)指令mov [eax][eax*2], al是正确的。

7 现有(ds)=2000h ,(bx)=0100h,(si)=0002h,(20100h)=12h,(20101h)=34h,(20102h)=56h,(20103h)=78h,(21200h)=2ah,(21201h)=4ch,(21202h)=0b7h,(21203h)=65h,说明下列指令执行后ax寄存器的内容。

(1)mov ax, 1200h

(2)mov ax, bx

(3)mov ax, [1200h]

(4)mov ax, [bx]

(5)mov ax, 1100h[bx]

(6)mov ax, [bx][si]

(7)mov ax, 1100h[bx][si]

答 :(1)指令mov ax, 1200h执行后,(ax)=1200h (立即数操作数)。

(2)指令mov ax, bx执行后,(ax)=0100h (寄存器操作数)。

(3)指令mov ax, [1200h] 执行后,(ax)=4c2ah(直接地址,ea=1200h)

(4)指令mov ax, [bx] 执行后,(ax)=3412h(寄存器间接寻址,ea=0100h)

(5)指令mov ax, 1100h[bx] 执行后,(ax)= 4c2ah(相对地址,ea=1200h)

(6)指令mov ax, [bx][si] 执行后,(ax)=7856h(基址变址寻址,ea=0102h)

7)指令mov ax, 1100h[bx][si] 执行后,(ax)=65b7h

相对基址变址寻址,ea=1202h)

8 已经定义字符串mystring如下:

mystring db ‘a sample for addressing.’

用适当的指令把这个字符串的第5,12个字符(注:第0个字符是’a’)送入bx寄存器。

答:可以用如下两条指令完成:

mov bl, mystring[5]

mov bh, mystring[12]

9 下面两条指令的功能有什么区别?

mov ax, bx

mov ax, [bx]

答:指令“mov ax, bx”把bx寄存器的内容装入到ax中。

指令“mov ax, [bx]”把内存储器一个字的内容装入ax寄存器。该字的段基址在ds中,偏移地址在bx中。

10 已经定义数据段如下:

data segment

num=56

x db num

y db 27

z dw 148

data ends

指出下列指令中的错误:

(1)mov y, x2)mov bl, 04b8h

(3)mov al, z4)mov [bx], 3

5)mov [bx], di6)mov ds, data

7) mov num, ax (8)mov es, ds

9) mov ax, flags (10)mov cs, ax

答: (1)指令mov y, x 同时出现了两个存储器操作数。

2)指令mov bl, 04b8h 操作数类型不匹配(04b8h是16位立即数,bl是8位。

寄存器)。(3)指令mov al, z 操作数类型不匹配(z是16位操作数,bl是8位寄存器)。

4)指令mov [bx], 3 操作数类型不能确定。

5)指令mov [bx], di] 出现了两个存储器操作数。

6)指令mov ds, data 不能把立即数装入段寄存器。

7)指令mov num, ax 立即数不能用作目的操作数。

8)指令mov es, ds 不能在段寄存器之间直接传输。

9)指令mov ax, flags中,flags寄存器只能隐含在少量指令中使用。

10)指令mov cs, ax 中,cs寄存器不能用作目的操作数。

11 用适当的指令,把下面字符串string中的“&”字符用空格代替。

string db “the date is feb&03”

答:可以使用如下指令:

mov string[15], 20h20h是空格的ascii**。

12 根据以下要求,写出对应的汇编语言指令。

1) 把bx和dx寄存器内容相加,结果存入dx寄存器。

2) 使用bx和si寄存器进行基址变址寻址,把存储器中一字节内容与al内容相加,结果存入存储单元。

3) 用寄存器bx和位移量0b2h的寄存器相对寻址方式,把存储器中一个双字与ecx相加,结果存入ecx。

4) 用偏移地址1020h直接寻址,把存储单元一个字内容与立即数3相加,结果存入存储单元。

5) 将al寄存器内容与立即数120相加,结果存入al寄存器。

答: (1) add dx, bx

(2) add [bx][si], al

(3) add ecx, [bx+0b2h]

(4) add word ptr[1020h], 3

(5) add al, 120

13 求以下各十六进制数与62a8h之和,并根据结果写出标志位sf、cf、zf、of的值。

1)1234h (2)4321h (3)0cfa0h (4)9d60h (5)0ffffh

答: (1)1234h+62a8h=74dch sczo= 0000

2) 4321h+62a8h=0a5c9h sczo= 1001

3) 0cfa0h+62a8h=3248h sczo= 0100

4) 9d60h +62a8h=0008h sczo= 0100

5) 0ffffh+62a8h=62a7h sczo= 0100

14 求以下各十六进制数与4ae0h之差,并根据结果写出标志位sf、cf、zf、of的值。

1)1234h (2)5d90h (3)9076h (4)0ea04h (5)0ffffh

答: 1) 1234h-4ae0h=0c754h sczo= 1100

2) 90h-4ae0h=12b0h sczo= 0000

3) 9076h-4ae0h=4597h sczo= 0001

4) 0ea04h-4ae0h=9f24h sczo= 1000

5) 0ffffh-4ae0h=0b51fh sczo= 1000

15 写出执行以下计算的指令序列,其中各变量均为16位有符号数。

1) z←w+(z-x)

2) z←w-(x+6)-(r+9)

3) z←(w*x)/(y+6), r←余数。

4) z←(w-x)/(5*y)*2

解:(1) mov ax, w

mov bx, z

sub bx, x

自编作业题

2013年秋季学期武佐小学九年级物理。一 选择题 每小题给出的四个选项中,只有 个是正确的 1 浸没于水中的钢球,在继续下沉的过程中,它受到的 a 浮力变小,压强变大b 浮力变小,压强变小。c 浮力不变,压强变大d 浮力不变,压强变小。2 你注意观察过家里的自行车吗?下列关于自行车增大摩擦或减小摩擦...

汇编作业8皇后

实验二报告。一 实验过程。编程环境 vs2010 实现思路 采用递归求解的思想,汇编 主要分三个模块 递归函数queen 求取第i行的合法的皇后位置 测试函数place 判定皇后当前位置是否合法,以eax返回判定结果 打印信息的宏 打印出当前得到的放置顺序。二 实验记录及理论分析。1 数组取值和赋值...

作业题答案

一 填空题。1.函数pi的功能是根据以下近似公式求 值 请将下面函数的空白处填写正确,以完成求 的功能。include using namespace std include double pi long n double s 0.0 long k for k 1 k n k s s 1.0 k k...