第七章 更靈活的定位內存地址的方法
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