本章需掌握:
程式設計,將datasg段中的每個單詞的頭乙個字母改寫成大寫字母。([bx+idata])
assume cs:code,ds:data
data segment //注意 每個字串都是16位
db '1. file '
db '2. edit '
db '3. search '
db '4. view '
db '5. options '
db '6. help '
data ends
code segment
start:mov ax,data
mov ds,ax
mov bx,
0 mov cx,
6s: mov al,ds:
[bx+3]
and al,
11011111b
mov ds:
[bx+3]
,al add bx,
16 loop s
mov ax,
4c00h
int21hcode ends
end start
注:大寫字母ascii碼的第五位為0。小寫字母的第五位為1。
將第五位強行置零或者置一,從而改變大小寫。
程式設計,將datasg段中的每乙個單詞改為大寫字母。
assume cs:code,ds:data
data segment
db 'ibm '
db 'dec '
db 'dos '
db 'vax '
data ends
code segment
start:
mov ax,data
mov ds,ax
mov bx,
0 mov cx,
4s0: mov dx,cx
mov si,
0 mov cx,
3s: mov al,ds:
[bx+si]
and al,
11011111b
mov ds:
[bx+si]
,al inc si
loop s
add bx,
16 mov cx,dx
loop s0
mov ax,
4c00h
int21hcode ends
end start
注:上面**,為了防止cx被覆蓋,用dx臨時儲存了cx。
但是當有多層迴圈的時候,用多個暫存器來儲存cx明顯不現實。所以可以將其暫存在記憶體中的某個位置。但是更通常的做法,是將cx壓入棧中,進行儲存。具體**和上述類似,略。
程式設計,將datasg段中的每乙個單詞的前4個字母改寫成大寫字母。
assume cs:code,ds:data,ss:stack
stack segment
dw 0,0
,0,0
,0,0
,0,0
stack ends
data segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify '
data ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,
16 mov ax,data
mov ds,ax
mov bx,
0 mov cx,
4s0:
push cx
mov si,
3 mov cx,4s:
mov al,ds:
[bx+si]
and al,
11011111b
mov ds:
[bx+si]
,al inc si
loop s
pop cx
add bx,
16 loop s0
mov ax,
4c00h
int21hcode ends
end start
總結:
參考文章:
組合語言 第七章 更靈活的定位記憶體位址的方法
and指令 邏輯與指令 兩個二進位制資料進行按位與 0與0為0,0與1為0,1與1為1 or指令 邏輯或指令 兩個二進位制資料進行按位或 0與0為0,0與1為1,1與1為1 美國規定的乙個編碼方案,用於計算機編碼和解碼 在組合語言中,字元資料以單引號的形式給出,如 0134 a abcd 等 程式7...
彙編 更靈活的定位記憶體位址
and 按位與 or 按位或 db unix db 75h,6eh,49h,58h 大小寫轉換 第5位置0,變大寫,第5位置1,變小寫 assume cs codesg,ds datasg datasg segment db bssic db minix datasg ends codesg seg...
更靈活的定位記憶體位址的方法
1 and和or指令 and指令 邏輯與指令,按位進行與運算 技巧 通過該指令可將操作物件的相應位設為0,其他位不變 or指令 邏輯或指令,按位進行或運算 技巧 通過該指令可將操作物件的相應位設為1,其他位不變 2 ascii碼 編碼方案,就是一套規則,它約定了用什麼樣的資訊來表示現實物件。例 61...