第八章 数据处理的两个基本问题
1)处理的数据栈什么地方?
2)要处理的数据有多长?
定义一个描述符号:reg表示寄存器 sreg表示段寄存器
reg:ax , bx, cx, dx, ah, al, bh, bl, ch, cl, dh, dl, sp, bp, si, di;
sreg: ds, ss, cs, es
8.1 bx, si, di 和bp
1)只有这4个寄存器可以用在 [...]进行内存单元地址。
mov ax, [bp]
mov ax, [bp + si]
其他通用寄存器不可取地址
2)在[...]中它们部分可以两两组合,或者再加上idata
bx 和 si
bx 和 di
bp 和 di
bp 和 si
si+di bx + bp 都是错误的
3)在[...]中使用BP 而没有给出段地址,默认段地址在ss中
mov ax, [bp] (ax) = ((ss)*16 + (bp))
mov ax, [bp + idata] (ax) = ((ss)*16 + (bp) + (idata))
mov ax, [bp + si] (ax) = ((ss)*16 + (bp) + (si))
mov ax, [bp + si + idata] (ax) = ((ss)*16 + (bp) + (si) + idata)
8.2 机器指令处理的数据在什么地方
处理大致可分为3类 : 读取, 写入, 运算
8.3 汇编语言中数据位置的表达
1) 立即数 idata 直接包含在机器指令中的数据(执行前中cpu的指令缓冲器中
例如
mov ax, 1
add bx, 2000h
or bx, 00010000b
mov al, 'a'
2) 寄存器
指令要处理的数据中寄存器中,在汇编指令中给出相应的寄存器名
例 mov ax, bx
mov ds, ax
push bx
...
3) 段地址(SA)和偏移地址(EA)
指令要处理段数据中内存中,用[...]给出
mov ax, [0]
mov ax, [di]
mov ax, [bx + 8]
mov ax, [bx + si + 8]
段地址在DS中
mov ax, [bp]
mov ax, [bp + 8]
mov ax, [bp + si]
mov ax, [bp + si + 8]
段地址在ss中
也可以显示给出段地址
mov ax, ds:[bp]<