【汇编】考试例题

汇编的考试题目

  1. 填空
  2. 简答
  3. 读程序
  4. 手写程序

数制转换

一些常识

  • 1K=1024=210

  • 1M=1024K=220

  • 1G=1024M=230

  • 1T=1024G=240

  • 一个二进制位:bit(比特)

  • 8个二进制位:byte(字节),1byte=8bit

  • 2个字节:word(字)

  • 1 word=2 byte =16bit

数的表示

重点是带符号数的表示

  • 无符号数:字长的全部有效位数均用来表示数值
  • 有符号数:字的最高为表示符号**(0表示正数,1表示复数)**,其他位数表示该数的绝对值
    数的表示

物理地址

8086 存储器编址

8086有20跟地址线,因此具有220=1MB的存储器地址空间,这1MB的内存单元按 00000~FFFFFH来编址。

但是,8086的内部寄存器包括指令指针和堆栈指针都是16位的,显然用寄存器不能直接对1MB的内存空间进行寻址,为此引入了分段的概念。8086 系统的一个段最长为64KB。在通常的程序设计中,一个程序可以有代码段、数据段、堆栈段和附加段,各段的段地址分别由:
CS(code segment)
DS(data segment)
SS(stack segment)
ES(extra segment)
这四个段寄存器给出。

段寄存器都是16位的。要计算一个存储单元的物理地址,先要将它对应的段寄存器的16位值左移四位(相当于乘十进制数16),得到一个20位的值,再加上16位的偏移量。

物理地址 = 段地址 + 偏移地址 = 段寄存器值 × 10h(左移四位 / 16d)+ 偏移地址

一个例题

指出红体部分的寻址方式(参见 8086寻址方式),计算其物理地址
已知:

(cs)=3100h,(ds)=3300h,(es)=3400h,(ss)3600h
(bx)=1600h,(di)=100h,(si)=200h,(bp)=300h,
count=3456h
  1. mov cl,[bx+si]
  2. cmp si,ss:[di]
  3. add ax, count [bp][si]
  4. call word ptr [si]
  5. lea dx,es:[1500h]

解答:

序号寻址方式物理地址
1基址加变址的寻址(默认ds段寄存器) 3300 h ∗ 10 h + ( 1600 h + 200 h ) = 33000 h + 1800 h = 34800 h 3300h*10h+(1600h+200h)=33000h+1800h=34800h 3300h10h+(1600h+200h)=33000h+1800h=34800hc
2寄存器间接寻址(指定段寄存器)(指定ss段寄存器) 3600 h ∗ 10 h + 100 h = 37100 h 3600h*10h+100h=37100h 3600h10h+100h=37100h
3基址加变址的寻址(利用bp间接寻址,因而默认段为ss) 3600 h ∗ 10 h + 3456 h + 300 h + 200 h = 39956 h 3600h*10h+3456h+300h+200h=39956h 3600h10h+3456h+300h+200h=39956h
4寄存器间接寻址(因为是call,因而默认段为cs) 3100 h ∗ 10 h + 200 h = 31200 h 3100h*10h+200h=31200h 3100h10h+200h=31200h
5指定段寄存器的直接寻址(指定es寄存器) 3400 h ∗ 10 h + 1500 h = 35500 h 3400h*10h+1500h=35500h 3400h10h+1500h=35500h

要注意的是:

  • 用bp,sp,ebp和esp进行间接寻址时,默认段为ss,
  • 用其他寄存器进行间接寻址时,默认段为ds。
  • 出现call,默认cs寄存器
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

neuralink

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值