《組合語言》 王爽 實驗11

2021-09-26 04:55:24 字數 1583 閱讀 2316

題:編寫乙個子程式,將包含任意字元,以0結尾的字串中的小寫字母轉變成大寫字母,描述如下。

名稱: letterc

功能: 將以0結尾的字串中的小寫字母轉變成大寫字母。

引數: ds:si指向字串首位址。

如題,任意字元,就得考慮一些其他字元,這就需要劃分乙個範圍,就是取出的字元應該在小寫字母的ascii碼範圍內。

這就可以用cmp指令和條件轉移指令。

assume cs:code,ds:data

data segment

db "beginner's all-purpose symbolic instruction code.",0

data ends

code segment

start: mov ax,data

mov ds,ax

mov si,0

call far ptr letterc ;呼叫子程式.功能:將以0結尾的字串中小寫字母轉變成大寫字母。

mov ax,4c00h

int 21h

comment !

子程式:將以0結尾的字串中小寫字母轉變成你大寫字母。

!letterc: push si

push di

push ax

push bx

push dx

push cx

mov dl,61h ;小寫字母的最小字母a的16進製制。

mov dh,7ah ;小寫字母最大字母z的16進製制。

comment !

標號b。作用:1.取字元

2.判斷是否最後乙個字元

3.判斷取出的字元是否在是大寫字母而不是其他字元

4.如果是大寫字母,則轉換為小寫覆蓋原處

4.如果是其他字元則重新跳轉到b標號.迴圈1步驟

!b : mov al,ds:[si] ;將字串送入到al中。

mov ah,0

mov cx,ax ;將ax中的值送入到cx,用來判斷是否取到最後乙個字元。

jcxz r ;如果cx中的值等於0的話,跳轉到r標號。

cmp al,dl ;判斷al的中的字元是否大於等於 小寫字母a的ascii碼。

jna a ;如果不大於等於則跳轉到標號a處。用來判斷al中的是否是小寫字母,而不是其他字元。

cmp al,dh ;判斷al中的字元是否小於等於 小寫字母z的ascii碼。

jnb a ;如果不小於等於則跳轉到a標號處。

and al,11011111b

mov ds:[si],al

comment !

標號a. 作用:用來指向下乙個字串。

!a: inc si

jmp b

comment !

標號r. 作用:將原暫存器的值返回並返回程式。

!r: pop cx

pop dx

pop bx

pop ax

pop di

pop si

retf

code ends

end start

王爽組合語言實驗11

實驗11 第一次發表文章,試一試 assume cs code data segment db beginner s all purpose symbolic instruction code.0 data ends stack segment db 16 dup 0 stack ends code...

組合語言 《組合語言》王爽 實驗一

從 1000 0 開始寫入命令 a 1000 0 mov ax,4e20 add ax,1416 mov bx,2000 add ax,bx mov bx,ax add ax,bx mov ax,001a mov bx,0026 add al,bl add ah,bl add bh,al mov a...

組合語言 王爽 實驗4

這學期在學彙編,沒怎麼自己動手程式設計過,結果到了中期編不出程式來,實在太尷尬了 特此來補各個實驗。4 11 0 200 0 20b 為什麼等同於 0020 0 0020b?0 200 0x16h 200 00200h 所以拆分成不同的形式即可轉換 assume cs code code segme...