- reg:寄存器
- sreg:段寄存器
- ds ss cs ds
- 16位可以用在[]中寻址的寄存器
- bx、bp、si、di
- [bx\bp+si\di]
- bp
- 只要[]中使用寄存器bp,而指令中没有显示的给出段地址,段地址默认在ss中
- 汇编语言中数据位置
- CPU的指令缓冲器:立即数
- CPU:寄存器
- 内存:段地址和偏移地址给出
- 指明访问单元的类型
- mov word ptr ds:[0],1 ; 字型
- mov byte ptr ds:[0],1 ; 字节型
- push、pop:只对字型数据进行操作(sp+/-2)
- 寻址方式和数据结构挂钩
- mov byte ptr [bx].10h[si],’V’ ; dec.cp[i]=’V’
- [bx+si+idata]方便结构化数据处理
- bx:整个结构体
- idata:定义结构体中的某一个数据项
- si:数组项中的每个元素
div
- 除法指令
- 除数:放寄存器或内存单元中
- 被除数:ax(16)或dx+ax(32)
- 除数8位,被除数16位,结果8位(商AL 余数AH)
- 除数16位,被除数32位,结果16位(商AX 余数DX)
- div byte ptr ds:[0]
- (al)=(ax)/((ds)*16+0)的商
- (ah)=(ax)/((ds)*16+0)的余数
- div word ptr es:[0]
- (ax)=[(dx)10000H+(ax)]/((es)16+0)的商
- (dx)=[(dx)10000H+(ax)]/((es)16+0)的余数
- 例题:100001(>65535)/100(<255)
- 100001要在32位寄存器中存放,虽然100<255可以存放在8位寄存器,但是要和被除数搭配,只能在16位寄存器中存放
mov dx,1H
mov ax,86A1H
mov bx,100
div bx
- 100001要在32位寄存器中存放,虽然100<255可以存放在8位寄存器,但是要和被除数搭配,只能在16位寄存器中存放
数据类型
- db:字节型
- dw:字型
- dd:双子型
- 例题:用div计算data段中中的第一个数据处以第二个数据后的结果,商放到第三个数据的存储单元中。
```cpp
assume ds:data,cs:code
data segment
dd 100001
dw 100
dw 0
data ends
code segment start:mov ax,data mov ds,ax mov bx,0 mov dx,ds:[bx+2] mov ax,ds:[bx] div word ptr ds:[bx+4] mov ds:[bx+6],ax
code ends end start
- dup
- 编译器识别处理的符号,进行数据的重复
- db 3 dup(0) = db 0,0,0
- db 3 dup(0,1,2) = db 0,1,2,0,1,2,0,1,2
- db()里是重复的字节型数据
- dw()里是重复的字型数据
- dd()里是重复的双字型数据
- 实验7
```cpp
assume cs:codesg,ds:datasg,es:table
datasg segment
db '1975','1976' ;地址 0~2*4-1H(一个字符一个byte) 0-53H
dd 16,22 ;地址 2*4H~2*4+3H 54H-0A7H
dw 3,7 ;地址 2*4+4H~2*4+11H 0A8H-0D1H
datasg ends
table segment
db 2 dup ('year summ ne ??')
table ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov ax,table
mov es,ax
mov bx,0
mov si,0
mov di,0
mov cx,2
s:mov al,[bx]
mov es:[di],al
mov al,[bx+1]
mov es:[di+1],al
mov al,[bx+2]
mov es:[di+2],al
mov al,[bx+3]
mov es:[di+3],al
mov ax,8h[bx]
mov dx,10h[bx]
mov es:[di+5],ax ;低位
mov es:[di+7],dx ;高位
mov ax,12h[si]
mov es:[di+0Ah],ax ;高位
mov ax,8h[bx]
mov dx,10h[bx]
div word ptr ds:12h[si]
mov es:[di+0dh],ax
add bx,4 ;double word
add si,2 ;word
add di,16
loop s
codesg ends