处理的数据在什么地方:
立即数(idata)1,3,10,3F
寄存器AX,AL,BX
内存单元,可用寻址方式给出DS:[idata],ds:[0]
处理的数据有多长:
MOV AX,1 ;字操作
MOV AL,1 ;字节操作
MOV BYTE PTR DS:[0],1 ;字节操作
MOV WORD PTR DS:[0],1 ;字操作
PUSH/POP 进行的是字操作
数据的定义:
data segment db 1H ;定义字节数据 每一个字节数据项占一个内存单元
dw 2H ;定义字数据 每一个字数据项占连续2个内存单元
dd 3H ;定义双字数据 每一个双字数据项占连续4个内存单元
dw 1E2FH ;定义一个字 高(8位)字节1EH,低(8位)字节2FH 存储在内存中 如下表
dw ? ;不对数据项分配初始值,仅分配内存单元 10009H,1000AH为预置空间
data ends
下表为以上数据在存储单元中的初始状态,内存中一个存储单元存放一个字节,一个字为两个字节,这个字的高位存放在高地址空间中,低位存放在低地址空间中:
起始地址1000:001H | 10000H(DB定义的数据1占1内存单元空间) |
00H | 10001H(DW定义的数据占2个内存单元空间) |
02H | 10002H |
00H | 10003H(DD定义的数据占4个内存单元地址) |
00H | 10004H |
00H | 10005H |
03H | 10006H |
2FH | 10007H(低位存放在低空间10007H单元中) |
1EH | 10008H(高位存放在低空间10008H单元中) |
? | 10009H |
? | 1000AH |
寻址
MOV AX,1000H
MOV DS,AX
MOV BX,0
MOV AL,DS:[BX] ;AL中保存地址10000H中的数据 即我们用db定义的数据"1H"
MOV AX,DS:[BX+1];一个字占连续的两个内存单元,低地址10001H高地址10002H可以读作10001H地址字单元,表示为DS:[10001H]
MOV AX,DS:[BX+3];双字的低16位存放在AX寄存器中
MOV DX,DS:[BX+5]; 高16为存放在DX寄存器中 AX,DX保存了DD定义的双字数据