彙編第七節 更靈活的定位記憶體位址的方法

2021-08-11 01:13:44 字數 3973 閱讀 9236

and指令:邏輯與指令,按位進行與操作

mov al,01100011b

and al,00111011b

執行後:al=00100011b

or指令:邏輯或指令,按位進行或運算

mov al,01100011b

or al,00111011b

執行後:al=01111011b

assume cs:code,ds:data

data segment

db 'unix' ;"db 75h,6eh,49h,58h"

db 'fork'

data ends

code segment

start:mov al,'a' ; "mov al,61h"

a的ascii碼為61h

mov bl,'b'

mov ax,4c00h

int 21h

code ends

endstart

將datasg中的第乙個字串轉化位大寫,第二個字串轉化為小寫。

assume cs:codesg,ds:datasg

datasg segment

db 'basic'

db 'information'

datasg ends

codesg segment

start:mov ax,datasg

mov ds,ax

mov bx,0

mov cx,5

s: mov al,[bx] ;將ascii碼從ds:bx所指向的單元中取出。

and al,11011111b ;第五個位置變為0,成為大寫。

mov [bx],al

inc bx

loop s

mov bx,5

mov cx,11

s0: mov al,[bx]

or al,00100000b

mov [bx],al

inc bx

loop s0

mov ax,4c00h

int 21h

codesg ends

endstart

[bx+idata]表示乙個記憶體單元,它的偏移位址為(bx)+idata

mov ax,[bx+200] 數位化描述:(ax)=((ds)*16+(bx)+200)

也可以寫成:

mov

ax,[200+bx]

movax,200[bx]

movax,[bx]

.200

在codesg中填寫**,將datasg中定義的第乙個字串轉化為大寫,第二個字串小寫

assume cs:codesg,ds:datasg

datasg segment

db 'basic '

db 'minix '

datasg ends

codesg segment

start:

codesg ends

endstart

mov ax,datasg

mov ds,ax

mov bx,0

mov cx,5

s: mov al,0[bx]

and a1,11011111b

mov o[bx],al

mov al,5[bx]

or al,00100000b

mov 5[bx],al

inc bx

loop s

si和di是8086cpu中和bx功能相近的暫存器,si和di不能夠分成兩個8位暫存器來使用。

用si和di實現將字串」welcome to masm!」複製到它後面的資料區中

assume cs:codesg,ds:datasg

datasg segment

db 'welcome to masm!'

db '..............................'

datasg ends

codesg segment

start:mov ax,datasg

mov ds,ax

mov si,0

mov cx,8

s: mov ax,0[si]

mov 16[si],ax

add si,2

loop s

mov ax,4c00h

int 21h

codesg ends

endstart

mov ax,[bx+si] //mov ax,[bx][si]

(ax)=((ds)*16+(bx)+(si))

將乙個記憶體單元的內容送入ax,這個記憶體單元的長度為2位元組,存放乙個字,偏移位址為bx中的數值加上si的數值,段位址在ds中

[bx+si+idata]偏移位址為(bx)+(si)+idata

mov ax,[bx+200+si]

mov ax,200[bx][si]

mov ax,[bx].200[si]

mov ax,[bx][si].200

assume cs:codesg,ds:datasg

datasg segment

db '1.file '

db '2.edit '

db '3.search '

db '4.view '

db '5.options '

db '6.help '

datasg ends

codesg segment

start:

codesg ends

endstart

將datasg中每個單詞的頭乙個字母改為大寫字母

mov ax,datasg

mov ds,ax

mov bx,0

mov cx,6

s:mov al,[bx+3]

and al,11011111b

mov [bx+3],al

add bx,16

loop s

db  'ibm        '

db 'dec '

db 'dos '

db 'vax '

將datasg(以上)的每個單詞改為大寫字母

在需要暫存資料的時候,我們都應該使用棧

stacksg segment         定義乙個段,用來做棧段,容量為16個位元組

dw 0,0,0,0,0,0,0,0

stacksg ends

codesg segment

start:mov ax,stacksg

mov ss,ax

mov sp,16

mov ax,datasg

mov ds,ax

mov bx,0

mov cx,4

s0:mov

push cx 將外層迴圈的cx值壓棧

mov si,0

mov cx,3 內層迴圈次數

s:mov al,[bx+si]

and al,11011111b

mov [bx+si],al

inc si

loop s

add bx,16

pop cx 從棧頂彈出原cx,恢復cx

loop s0 外層迴圈的loop將cx減1

彙編 更靈活的定位記憶體位址

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...

第七章 更靈活的定位記憶體位址的方法

本章需掌握 程式設計,將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.option...

六 彙編 更靈活的定位記憶體位址的方法

可以用 0 bx 的方法訪問記憶體的指令中,定位記憶體單元的位址。a.and 指令,按位進行與運算。b.or 指令,邏輯或指令,按位進行或運算。a.計算機中所有的資訊都是二進位制的,而人能理解的資訊是已經具有約定意義的字元。編碼儲存資訊,解碼展示資訊。b.目前計算機通常採用的編碼方式 ascii編碼...