彙編中將位元組比較轉變為字比較從而減少指令

2021-07-29 23:52:35 字數 1980 閱讀 8607

在proc為首址的位元組儲存區中存放著一段彙編源程式,最後以ctrl-z即』^z』, 其ascii碼為1ah作為結束標誌

試編寫程式,統計 「mov」 出現的次數, 並將統計結果儲存到 字變數num中

每次比較乙個byte的匯程式設計序

.386

stack segment use16 stack

db 100 dup(0)

stack ends

data segment use16

num dw 0

prog db "mov ax, data", 0dh, 0ah

db "mov ds, ax", 0dh, 0ah

db "mov ax, 0", 0dh, 0ah

db "mov bx, 2", 0dh, 0ah

db "lea si, mmov", 0dh, 0ah

db "add ax, bx", 0dh, 0ah

db "mov momov[si], ax", 0dh, 0ah, 1ah

data ends

code segment use16

assume cs:code, ds:data, ss:stack

main:

mov ax, data

mov ds, ax

mov si, 0

lopa:

cmp prog[si], 1ah

je exit

cmp prog[si], 'm'

jne next

cmp prog[si] + 1, 'o'

jne next

cmp prog[si] + 2, 'v'

jne next

add num, 1

add si, 2

;尋找成功,跳過ov,繼續尋找

next:

inc si

jmp lopa

exit:

mov ah, 4ch

int 21h

code ends

end main

.386

stack segment use16 stack

db 100 dup(0)

stack ends

data segment use16

num dw 0

prog db "mov ax, data", 0dh, 0ah

db "mov ds, ax", 0dh, 0ah

db "mov ax, 0", 0dh, 0ah

db "mov bx, 2", 0dh, 0ah

db "lea si, mmov", 0dh, 0ah

db "add ax, bx", 0dh, 0ah

db "mov momov[si], ax", 0dh, 0ah, 1ah

data ends

code segment use16

assume cs:code, ds:data, ss:stack

main:

mov ax, data

mov ds, ax

mov si, 0

lopa:

cmp prog[si], 1ah

je exit

cmp prog[si], 'm'

jne next

cmp word ptr prog[si + 1], 'vo'

jne next

addnum, 1

add si, 2 ;尋找成功,跳過ov,繼續尋找

next:

inc si

jmp lopa

exit:

mov ah, 4ch

int 21h

code ends

endmain

注意是和 vo 進行比較, x86使用的時候小端儲存【資料的高位元組在高位址】。

將普通表轉變為分割槽表

oracle的普通表沒有辦法通過修改屬性的方式直接轉化為分割槽表,必須通過重建的方式進行轉變,下面介紹三種效率比較高的方法,並說明它們各自的特點。方法一 利用原表重建分割槽表。步驟 sql create table t id number primary key,time date 表已建立。sql...

將普通表轉變為分割槽表

oracle的普通表沒有辦法通過修改屬性的方式直接轉化為分割槽表,必須通過重建的方式進行轉變,下面介紹三種效率比較高的方法,並說明它們各自的特點。方法一 利用原表重建分割槽表。步驟 sql create table t id number primary key,time date 表已建立。sql...

ScriptCS 將C 轉變為指令碼語言

scriptcs支援開發者使用簡單的文字編輯器編寫c 應用,並通過roslyn執行編譯,使用nuget進行包管理。windows azure sdk團隊的專案經理glenn block啟動了scriptcs專案,它是乙個嘗試將c 變成指令碼語言的業餘專案。開發者能夠利用其c 知識,使用簡單的文字編輯...