第七章 更灵活的定位内存地址的方法
1、and和or指令:
2、ASCII码:and指令:可以将操作对象相应位设为0,其他位不变;
or指令:可以将操作对象相应位设为1,其他位不变;
3、以字符形式给出的数据:
4、[bx+idata]'......'指明数据是以字符形式给出的,编译器将它们转化成对应的ASCII码
大写字母——>ASCII码的第5位为0;(小写字母对应为1)
5、SI和DI(源地址寄存器、目的地址寄存器)mov ax,[200+bx]
mov ax,200[bx]
mov ax,[bx].200
可以利用[bx+idata]进行数组处理
6、不同的寻址方式SI、DI与bx功能相近,但是不能分成两个8位寄存器;
[bx+si]、[bx+di]、[bx+si+idata]、[bx+di+idata]
mov ax,[bx][si]
mov ax,[bx+200+si]
mov ax,[200+bx+si]
mov ax,200[bx][si]
mov ax,[bx].200[si]
mov ax,[bx][si].200
【实验6:将datasg段中的每个单词的前四个字母改成大写字母】
assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
datasg segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify '
datasg ends
codesg segment
start: mov ax,datasg
mov ds,ax
mov ax,stacksg
mov ss,ax
mov sp,16
mov bx,0
mov cx,4
s0: push cx //将外层循环的cx值压栈
mov cx,4
mov si,0
s: mov al,[bx+3+si]
and al,11011111b
mov [bx+3+si],al
inc si
loop s
pop cx
add bx,16
loop s0
mov ax,4c00h
int 21h
codesg ends
end start
外层循环一次的结果,以及程序运行的最终结果如下
第八章 数据处理的两个基本问题
reg寄存器;sreg段寄存器(ds\ss\cs\es)
1、bx、si、di、bp
[...]中使用bp寄存器,段地址默认在ss中
2、机器指令处理的数据所在位置:CPU内部、内存、端口
3、汇编语言中数据位置的表达:
4、寻址方式:立即数(idata)
寄存器
段地址(SA)和偏移地址(EA)
5、指令处理的数据长度:
6、div指令:寄存器指明;X ptr指明(X可以为word、byte)
7、伪指令dd:定义双字类型(dword)div reg
div 内存单元
除数为8位:则被除数为16位,默认在AX中;结果:AL存储商,AH存储余数
除数为16位:则被除数为32位,默认在DX和AX中,DX存放高16位,AX存放低16位;结果:AX存储商、DX存储余数
8、dup:配合db\dw\dd等使用,进行数据的重复,db 3 dup(0)等价于db 0,0,0