【汇编语言(第3版)王爽】第八章学习内容

  1. 只要在[]中使用寄存器bp,而指令中没有显性地给出段地址,段地址就默认在ss中。
    1. mov ax,[bp] 含义:(ax) = ((ss)*16+(bp))
    2. mov ax,[bp+idata] 含义:(ax) = ((ss)*16+(bp)+idata)
    3. mov ax,[bp+si] 含义:(ax) = ((ss)*16+(bp)+(si))
    4. mov ax,[bp+si+idata] 含义:(ax) = ((ss)*16+(si)+idata)
  2. 寻址方式:
    1. 直接寻址:
      1. 表达式: [idata]
      2. 直接根据常量寻址,在C语言中表示为arr[0]
    2. 寄存器间接寻址:
      1. 表达式:[bx]、[si]、[di]、[bp]
      2. 根据寄存器的数据寻址,在C语言中表示为arr[i]
    3. 寄存器相对寻址:
      1. 表达式:[bx+idata]、[si+idata]、[di+idata]、[bp+idata]
      2. 根据寄存器和常量寻址,在C语言中表示为arr[i+10]
    4. 基址变址寻址:
      1. 表达式:[bx+si+idata]、[bx+di+idata]、[bp+si+idata]、[bp+di+idata]
      2. 根据两个寄存器和一个常量寻址,在C语言中表示为arr[i+j+5]
  3. 要操作的数据的长度:
    1. 如果操作符两边有寄存器,以寄存器的大小确定操作的是字还是字节。
    2. 如果没有寄存器,可以自行指定:
      1. mov word ptr [2],1
      2. mov byte ptr [2],1
    3. 有些指定默认指定了访问的是字还是字节:
      1. 比如push [1000h]默认操作的是字。
  4. div指
    1.   
  1. data segment中:
    1. db(data byte)定义的是字节型数据,每1个数据占1个字节。
    2. dw(data word)定义的是字型数据,每1个数据占1个字,即2个字节。
    3. dd(data double word)定义的是双字型数据,每1个数据占2个字,即4个字节。
  2. 问题8.1
assume cs:codesg, ds:datasg
 
datasg segment
dd 100001
dw 100
dw 0
datasg ends
 
 
codesg segment
start:
mov ax,datasg
mov ds,ax
mov dx,ds:[2] ;注意高位在低位后面
mov ax,ds:[0]
div word ptr ds:[4]
mov ds:[6],ax
 
 
codesg ends
end start

 

posted @ 2018-01-19 21:55  ninding  阅读(258)  评论(0编辑  收藏  举报