title: 汇编笔记_第八章
date: 2018-12-27 20:04:33
tags:
[...]
来寻址,像mov ax,[cx]
就是错误的;[...]
中,这四个寄存器可以的那个出现,或 只能以四种组合出现:bx和si、bx和di、bp和si 以及 bp和di,mov ax,[bx+bp]
是错误的;[...]
中使用寄存器 bp,而指令中没有显示的给出段地址,段地址就默认在 ss中,比如:mov ax,[bp+si+idata]
的含义是:(ax)=((ss)*16+(bp)+(si)+idata)
;汇编语言中用三种概念来表达数据的位置:立即数(idata)、寄存器、段地址(SA)和偏移地址(EA);
寻址方式 | 含义 | 名称 | 常用格式举例 |
---|---|---|---|
[idata] | SA=(ds);EA=idata | 直接寻址 | [idata] |
[bx] [si] [di] [bp] |
SA=(ds);EA=(bx) SA=(ds);EA=(si) SA=(ds);EA=(di) SA=(ss);EA=(bp) |
寄存器间接寻址 | [bx] |
[bx+idata] [si+idata] [di+idata] [bp+idata] |
SA=(ds);EA=(bx)+idata SA=(ds);EA=(si)+idata SA=(ds);EA=(di)+idata SA=(ss);EA=(bp)+idata |
寄存器相对寻址 | 用于结构体:[bx].idata; 用于数组:idata[si],idata[di]; 用于二维数组:[bx][idata] |
[bx+si] [bx+di] [bp+si] [bp+di] |
SA=(ds);EA=(bx)+(si) SA=(ds);EA=(bx)+(di) SA=(ss);EA=(bp)+(si) SA=(ss);EA=(bp)+(di) |
基址变址寻址 | 用于二维数组:[bx][si] |
[bx+si+idata] [bx+di+idata] [bp+si+idata] [bp+di+idata] |
SA=(ds);EA=(bx)+(si)+idata SA=(ds);EA=(bx)+(di)+idata SA=(ss);EA=(bp)+(si)+idata SA=(ss);EA=(bp)+(di)+idata |
相对基址变址寻址 | 用于表格(结构)中的数据项:[bx].idata[si] 用于二位数组:idata[bx][si] |
mov al,ds:[0] //按字节操作
mov ax,ds:[0] //按字操作
add word ptr [bx],2 //按字操作
mov byte ptr ds:[0],1 //按字节操作
有些指令默认是访问字单元还是字节单元,例如:push 指令只进行字操作;
一般来说,可以用 [bx+idata+si]
的方式来访问结构体中的数据;
汇编的写法:[bx].idata , [bx].idata[si]
;
例如c中: dec.cp[i]
,dec指明了结构体变量的的地址;cp指明了数据项cp的地址;i用来定位cp中的每一个字符;汇编语言:bx.10h[si]
;
div指令格式:div reg
或div 内存单元
;
div byte ptr ds:[0]
含义:
(al)=(ax)/((ds)*16+0)的商
(al)=(ax)/((ds)*16+0)的余数
div word ptr es:[0]
含义:
(ax)=[(dx)*10000H+(ax)]/((es)*16+0)的商
(dx)=[(dx)*10000H+(ax)]/((es)*16+0)的余数
dd是用来定义 dword(double word双字) 型数据的;
dup的使用格式:
db 重复的次数 dup (重复的字节型数据)
dw 重复的次数 dup (重复的字型数据)
dd 重复的次数 dup (重复的双字数据)
eg:
db 3 dup (0,1,2)
相当于:
db 0,1,2,0,1,2,0,1,2
https://www.cnblogs.com/31415926535x/p/10187504.html
(end)
原文:https://www.cnblogs.com/31415926535x/p/10187504.html