- 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,1Hmov ax,86A1Hmov bx,100div 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```cppassume cs:codesg,ds:datasg,es:tabledatasg segmentdb '1975','1976' ;地址 0~2*4-1H(一个字符一个byte) 0-53Hdd 16,22 ;地址 2*4H~2*4+3H 54H-0A7Hdw 3,7 ;地址 2*4+4H~2*4+11H 0A8H-0D1Hdatasg endstable segmentdb 2 dup ('year summ ne ??')table endscodesg segmentstart: mov ax,datasgmov ds,axmov ax,tablemov es,axmov bx,0mov si,0mov di,0mov cx,2s:mov al,[bx]mov es:[di],almov al,[bx+1]mov es:[di+1],almov al,[bx+2]mov es:[di+2],almov al,[bx+3]mov es:[di+3],almov 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],axadd bx,4 ;double wordadd si,2 ;wordadd di,16loop scodesg ends
