組合語言字串比較與查詢

2021-08-07 13:20:52 字數 1941 閱讀 8157

(組合語言實現)用字串處理指令編制程式,處理字串的比較和查詢,顯示結果。

要求:(1)字串的比較函式中,乙個字串在資料段定義,另乙個字串在程式執行時從鍵盤輸入,必須定義鍵盤緩衝區。指出不相等的位置。

(2)在字串中查詢某個字元,並指出找到的位置。

第一問:

data

segment

buff

db255

dup('?');定義乙個緩衝區,緩衝區長度比需要比較的字串長即可,緩衝區的?需要加單引號

data

ends

extsegment

mess

db'www.omegaxyz.com$';注意最後一定要加$

extends

code

segment

assume

cs:code,ds

:data,es

:ext

start

:mov

ax,data

movds,ax

movax,ext

moves,ax

;套路lea

dx,buff

movah,0ah

int21h

;使用dos 0ah命令向緩衝區輸入字串

movcl,buff+1

;注意dos 0ah命令實際輸入的字元數量儲存在記憶體dx+1中(見附錄),即buff+1,因此把buff+1的值給cl

leasi,buff+2

;需要使用cmpsb命令,從buff+2開始是真正輸入的值賦值給si

leadi,mess

;被比較的原始串

cldmov

bl,'0'

;為了顯示串開始不同的地方,設定bl的初始值,由於顯示的是ascii碼所代表的值,因此把『0』賦值給bl

xy:inc

blcmpsb

loopz

xy;迴圈一次bl+1

jzyes

movdl,bl

jmp *********x

yes:mov

dl,'y'

*********x:

movah,2

int21h

;顯示mov

ah,4ch

int21h

code

ends

endstart

第二問:

ext

segment

mess

db'www.omegaxyz.com$'

extends

;注意要使用scasb命令必須將資料儲存在es中

code

segment

assume

cs:code,es

:ext

start

:mov

ax,ext

moves,ax

movah,01h

int21h

;呼叫dos

01h命令,從鍵盤中輸入1個字元並儲存在al中

movcx,17

leadi,mess

cldmov

bl,'0'

;為了尋找所求字元位置,設定乙個暫存器用來儲存

xy:inc

blscasb

loopnz

xy;loopnz

cx不等於0,zf=0即不相等時迴圈

jzyes

movdl,'n'

;n說明沒有查詢到

jmpdisp

yes:mov

dl,bl

disp

:mov

ah,2

int21h

movah,4ch

int21h

code

ends

endstart

組合語言(四)之比較字串

輸入兩個字串,比較字串是否相同 程式執行 mov ax,datas 初始化ds mov ds,ax 輸出輸入string1提示 lea dx,input1prompt mov ah,9 int 21h 輸入string1 lea dx,string1maxlength mov ah,10 int 2...

計算字串長度 組合語言

設有一字串存放在以 buf 為首址的資料區中,其最後一字元 作為結束標誌,計算該字串的長度並輸出 datas segment buf db 20,20 dup datas ends stacks segment stacks ends codes segment assume cs codes,ds...

組合語言巧妙排序字串

用組合語言實現任意輸入字串排序,我主要是採用先分組,然後分別排序,在把兩個組合起來排序的使用演算法。在我的輸出結果頁面中,總共會有6行,第一行表示的是你所輸入的我們需要排序的字串,第二行表示的是將字串分為兩組其中的第一組,第三行表示的是將字串分為兩組其中的第二組,第四行表示的是對分成的第一組排序得到...