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...