1>
数据处理的两个基本问题
1处理的数据在什么地方
2要处理的数据有多长
描述性符号
寄存器reg:ax,bx,cx,dx,ah,al,bh,bl,ch,cl,dh,dl, sp,#bp,si,di;
段寄存器sreg:ds,ss,cs,es;
what's bp?
8086中[...]可用的寄存器是bx,si,di,bp,可以单独出现,也可以独立出现,一般用两个
只要在[...]中用bp,而指令中没有显示给出段地址,默认用ss
2>
机器指令处理的数据所在位置
一般指令都是数据处理的指令
处理大致可分为3类:读取,写入,运算
处理的数据可以在3个地方:cpu内部(寄存器,或是指令缓冲区),内存,端口
3>
汇编语言中数据位置的表达
立即数idata
mov ax,1
add bx,200h
寄存器
段地址sa+偏移地址ea
mov ax,[bx+1] ;段地址默认在ds中
总结:寻址方式
直接寻址[idata]
寄存器间接寻址[bx]
寄存器相当寻址
用于结构体[bx]idata
用于数组idata[si]
用于二维数组[bx][idata]
基址变址寻址
用于二维数组[bx][si]
相对基址变址寻址
用于表格(结构)中的数组项
[bx].idata[xi]
用于二维数组
idata[bx][si]
4>指令要处理的数据有多长
处理数据两种:byte word
所以在进行的是字操作还是字节操作,要指明
在无寄存器存在时用 x ptr 指明内存单元的长度
mov word ptr ds:[0],1
inc word prt [bx]
mov byte ptr ds:[0],1
inc byte prt [bx]
push pop只进行字操作
5>
寻址方式的综合应用
关于dec公司的..条记录
公司名称:dec
总裁姓名:ken olsen
排名:137
收入:40
产品:pdp
[bx+si+idata]=(ds)*16+(bx)+(si)+idata ; ds:bx大步确定结构体,idata,常量中确定数据项,si小步确定数据项的单个元素
结构化的数据处理
从结构化的角度去看待所要处理的数据
结构化的数据包含多个数据项(类型不同)
[bx+idata+si]方式访问结构体中的数据
bx定位整个结构体
idata定位某个数据项
si定位数组中的每个元素
等效书写[bx].idata ;[bx].idata[si]
mov word ptr [bx].0ch 38 ;将38送入地址[bx].0ch([(bx)+0ch]) ,首选地址为ds:bx ,指针方向:+0ch
6>
div指令
除数:有8位,16位,在一个寄存器或内存中
被除数:默认放在ax或dx+ax中
除数8位,则被除数16位,被除数默认在ax中存放
除数16位,则被除数32位,被除数默认放在dx和ax中,dx高16位/ax存放低16位
结果:
如果除数8位,则,al存储除法操作的商
ah存储除法操作的余数
如果除数16位,则,ax存储除法操作的商
dx存储除法操作的余数
格式:
div reg ; 根据默认8/16找到被除数,和给定的除数进行计算
div 内存单元
分析100001/100
100001是被除数用2个寄存器,0001 86a1H
mov dx ,0001H
mov ax ,86a1h
mov bx, 100H
div bx
结果:ax=商0186
dx=余数00a1
7>伪指令
db 字节
dw 子
dd double word 双字
8>dup
和db dw dd一样!由编译器识别处理的符号
格式
db 重复的 次数 dup('重复的字节型数据')
dw 重复的 次数 dup('重复的字型数据')
dd 重复的 次数 dup('重复的双字型数据')
实验 寻址方式在结构化数据访问中的应用
assume cs:codesg
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
db '1984','1985','1986',1987','1988','1989','1990','1991','1992'
db '1993','1994','1995'
;表示21年的字符串
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 34980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;21年公司收入数据
dw 3,7,9,13,28,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
;公司人员
data ends
table segment
db 21 dup ('year summ ne ?? ')
table ends