欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

匯編語(yǔ)言功能字符串大小寫轉(zhuǎn)換實(shí)現(xiàn)實(shí)例詳解

 更新時(shí)間:2021年11月04日 15:56:18   作者:LyncDwight  
這篇文章主要為大家介紹了匯編語(yǔ)言功能大小寫轉(zhuǎn)換實(shí)現(xiàn)的實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

問(wèn)題1:將data段中的第一個(gè)字符串轉(zhuǎn)換成大寫,第二個(gè)字符串轉(zhuǎn)換成小寫

分析:

如何轉(zhuǎn)換成大小寫

如果利用ASCII碼進(jìn)行轉(zhuǎn)換的話,需要判斷該字符是大寫還是小寫,匯編語(yǔ)言實(shí)現(xiàn)太過(guò)困難,可以對(duì)字符串的二進(jìn)制進(jìn)行分析。

在ASCII碼中,大寫字母的第五位為0,小寫字母的第五位為1,可以對(duì)位取反進(jìn)行大小寫轉(zhuǎn)換

assume cs:code,ds:data
data segment
	db 'BaSiC'
	db 'InfoMaTion'
data ends
;------------------------------------
;做法一
code segment
start:	        mov ax,data
		mov ds,ax
		mov bx,0	;設(shè)置ds:bx指向數(shù)據(jù)段		
		mov cx,5	;對(duì)于第一個(gè)字符串進(jìn)行循環(huán)轉(zhuǎn)換
s:		mov al,ds:[bx]
		and al,11011111B  ;將字符的第五位轉(zhuǎn)換成0,轉(zhuǎn)換成大寫字母
		mov ds:[bx],al
		inc bx
		loop s 
		mov bx,5	;指向第二個(gè)字符串
 		mov cx,11
s0:		mov al,ds:[bx]
		or al,00100000B	  ;將字符的第五位轉(zhuǎn)換成1,轉(zhuǎn)換成小寫字母
		mov ds:[bx],al
		inc bx
		loop s 
		mov ax,4c00h
		int 21h
code ends
;------------------------------------
;做法二,改進(jìn)版:利用bx+idata實(shí)現(xiàn)代碼的簡(jiǎn)化
 
code segment
start:	        mov ax,data
		mov ds,ax
		mov bx,0
		mov cx,5
s:		mov al,ds:[bx]
		and al,11011111b
		mov ds:[bx],al
		mov al,ds:[bx+5]
		or al,00100000b
		mov ds:[bx+5],al
		inc bx
		loop s 
code ends
;------------------------------------
end start

問(wèn)題2:將data段中每個(gè)單詞的頭一個(gè)字母改成大寫字母

分析: 如何實(shí)現(xiàn)循環(huán)

該段數(shù)據(jù)是結(jié)構(gòu)化的數(shù)據(jù),則可以看做成一個(gè)二維數(shù)組,用一個(gè)變量定位行,用一個(gè)常量定義第一個(gè)字母

assume cs:code,ds:data
data segment
	db '1. file         '
	db '2. edit         '
	db '3. search       '
data ends
code segment
start:	        mov ax,data
		mov ds,ax
		mov bx,0	;ds:bx指定數(shù)據(jù)段,同時(shí)bx作為定義行的變量 
		mov cx,3
s:		mov al,ds:[bx+3]	;3作為常量,定義第一個(gè)字母
		and al,11011111b
		mov ds:[bx+3],al
		add bx,16
		loop s 
		mov ax,4c00h
		int 21h
code ends
 
end

問(wèn)題3:將data段中每個(gè)單詞改為大寫字母

分析: 1、對(duì)于這種結(jié)構(gòu)化的數(shù)據(jù),不僅需要一個(gè)變量定義行,同時(shí)也需要一個(gè)變量定義列

assume cs:code,ds:data,ss:stack
data segment
	db 'ibm             '
	db 'dec             '
	db 'vax             '
data ends 
;--------------------------------------------
;做法一
code segment
start:	        mov ax,data
		mov ds,ax
		mov bx,0 
		mov cx,3
s0:		mov dx,cx	;同時(shí)使用同一個(gè)變量進(jìn)行循環(huán),需要對(duì)外層循環(huán)的值保存
		mov si,0
		mov cx,3	;cx設(shè)置成內(nèi)層循環(huán)的次數(shù) 
s:		mov al,ds:[bx+si]
		and al,11011111b
		mov ds:[bx+si],al
		inc si		
		loop s
 		add bx,16
		mov cx,dx	;用dx中存放的外層循環(huán)恢復(fù)外層循環(huán)的計(jì)數(shù)器
		loop s0
 		mov ax,4c00h
		int 21h
code ends 
;--------------------------------------------
;做法二,利用棧保存外層循環(huán)的值
stack segment
	dw 8 dup(0)		;利用棧段保存cx的值
stack ends
code segment
start:	        mov ax,stack
		mov ss,ax
		mov sp,16	;ss:sp指向棧段 
		mov ax,data
		mov ds,ax
		mov bx,0	;ds:bx指向數(shù)據(jù)段
 		mov cx,3
s0:		push cx
		mov si,0
		mov cx,3 
s:		mov al,ds:[bx+si]
		and al,11011111b
		mov ds:[bx+si],al
		inc si
		loop s 
		add bx,16
		pop cx
		loop s0
 		mov ax,4c00h
		int 21h
code ends
;-------------------------------------------- 
end start

問(wèn)題4:將data段中每個(gè)單詞的前4個(gè)字母改為大寫字母

分析 如何定位每個(gè)字符串的內(nèi)容

采用bx+si+idata來(lái)進(jìn)行首字母的定位

assume cs:code,ds:data,ss:stack
data segment
	db '1. display      '
	db '2. brows        '
	db '3. replace      '
data ends
stack segment
	dw 8 dup(0)
stack ends 
code segment
start:	        mov ax,stack
		mov ss,ax
		mov sp,16 
		mov ax,data
		mov ds,ax
		mov bx,0 
		mov cx 3	;設(shè)置外層循環(huán)只有3行
s0:		push cx
		mov si,0
		mov cx,4	;設(shè)置內(nèi)層循環(huán)只需4次 
s:		mov al,ds:[bx+si+3]		;設(shè)置需要改變的第一個(gè)字母
		and al,11011111b
		mov ds:[bx+si+3],al
		inc si
		loop s 
		add bx,16
		pop cx
		loop s0 
		mov ax,4c00h
		int 21h
code ends
 
end start

問(wèn)題5:設(shè)計(jì)一個(gè)子程序,將一個(gè)全是字母的字符串轉(zhuǎn)化成大寫

分析: 子程序的設(shè)計(jì)需要注意兩個(gè)問(wèn)題:字符串的內(nèi)容和長(zhǎng)度

字符串的內(nèi)容不可能全部放在子程序中,可以考慮在子程序中放入字符串的首地址,利用循環(huán)遍歷字符串,循環(huán)的次數(shù)就是字符串的長(zhǎng)度

assume cs:code,ds:data
data segment
	db 'conversation'
data ends
 
code segment
start:	                mov ax,data
		        mov ds,ax
		        mov si,0		;ds:si指向字符串所在空間的首地址
		        mov cx,12		;cx存放字符串的長(zhǎng)度
		        call capital
		        mov ax,4c00h
		        int 21h
 
capital:	        and byte ptr ds:[si],11011111b
			inc si
			loop capital
			ret
code ends
 
end start

問(wèn)題6:設(shè)計(jì)一個(gè)子程序,將一個(gè)全是字母,以0結(jié)尾的字符串,轉(zhuǎn)化成大寫

分析:

1、要處理以0結(jié)尾的字符串,需要識(shí)別結(jié)尾的0

采用jcxz進(jìn)行判斷最后的字符是否是0

2、循環(huán)的次數(shù)無(wú)法知道

所以不能用loop,只能使用jmp跳到循環(huán)開始處

assume cs:code,ds:data
data segment
	db 'conversation',0
data ends 
code segment
start:		        mov ax,data
			mov ds,ax
			mov si,0			;ds:si指向數(shù)據(jù)段的開始處 
			call capital
 			mov ax,4c00h
			int 21h 
capital:	        mov cl,ds:[si]		
			mov ch,0
			jcxz ok				;如果字符串為0,則會(huì)跳出循環(huán)
			and byte ptr ds:[si],11011111b
			inc si
			jmp short capital	        ;跳轉(zhuǎn)實(shí)現(xiàn)循環(huán) 
ok:			ret				;結(jié)束循環(huán) 
code ends
end start

復(fù)雜一點(diǎn)的對(duì)結(jié)構(gòu)化數(shù)據(jù)的版本

assume cs:code,ds:data,ss:stack
data segment
	db 'word',0
	db 'unix',0
	db 'wind',0
data ends
stack segment
	db 8 dup(0)
stack ends 
code segment
start:		        mov ax,data
			mov ds,ax
			mov bx,0 
			mov cx,3		;外循環(huán)實(shí)現(xiàn)
s:			mov si,bx
			call capital
			add bx,5		;內(nèi)循環(huán)的實(shí)現(xiàn)
			loop s 
			mov ax,4c00h
			int 21h 
capital:	        push cx
			push si 
change:		        mov cl,ds:[si]
			mov ch,0
			jcxz ok
			and byte ptr ds:[si],11011111b
			inc si
			jmp short change 
ok:			pop si
			pop cx
			ret 
code ends
end

以上就是匯編語(yǔ)言功能大小寫轉(zhuǎn)換實(shí)現(xiàn)實(shí)例詳解的詳細(xì)內(nèi)容,更多關(guān)于匯編語(yǔ)言功能大小寫轉(zhuǎn)換的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 匯編語(yǔ)言功能用循環(huán)累加實(shí)現(xiàn)乘法

    匯編語(yǔ)言功能用循環(huán)累加實(shí)現(xiàn)乘法

    這篇文章主要為大家介紹了匯編語(yǔ)言實(shí)現(xiàn)功能,使用用循環(huán)累加來(lái)實(shí)現(xiàn)乘法,文中通過(guò)幾個(gè)問(wèn)題實(shí)例分析,來(lái)為大家進(jìn)行詳細(xì)講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • 匯編語(yǔ)言中的各種寄存器介紹

    匯編語(yǔ)言中的各種寄存器介紹

    匯編語(yǔ)言(assembly language)是一種用于電子計(jì)算機(jī)、微處理器、微控制器或其他可編程器件的低級(jí)語(yǔ)言,亦稱為符號(hào)語(yǔ)言.這篇文章主要介紹了匯編語(yǔ)言中的各種寄存器介紹,需要的朋友可以參考下
    2020-01-01
  • 匯編語(yǔ)言?masm5與debug命令使用方法小結(jié)

    匯編語(yǔ)言?masm5與debug命令使用方法小結(jié)

    本文總結(jié)了匯編程序的基本框架及規(guī)范、masm5工具的基本使用方法、debug命令的基本使用方法
    2023-08-08
  • 匯編語(yǔ)言系列之匯編實(shí)現(xiàn)字符串操作

    匯編語(yǔ)言系列之匯編實(shí)現(xiàn)字符串操作

    本文列出了字符串匹配和字符串輸入顯示的代碼,對(duì)匯編語(yǔ)言系列之匯編實(shí)現(xiàn)字符串操作相關(guān)知識(shí)感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • 匯編語(yǔ)言偽指令和匯編指令的區(qū)別

    匯編語(yǔ)言偽指令和匯編指令的區(qū)別

    指令是控制程序運(yùn)行時(shí)的機(jī)器代碼運(yùn)作的,是CPU執(zhí)行的依據(jù),編程、編譯、執(zhí)行都是有效的。偽指令不直接控制運(yùn)行時(shí)刻的機(jī)器,但是控制翻譯程序如何生成機(jī)器指令代碼,感興趣的朋友跟隨小編一起看看吧
    2020-01-01
  • 匯編實(shí)現(xiàn)直接插入排序的方法示例

    匯編實(shí)現(xiàn)直接插入排序的方法示例

    這篇文章主要介紹了匯編實(shí)現(xiàn)直接插入排序的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • ARM匯編解決階乘及大小寫轉(zhuǎn)換的問(wèn)題

    ARM匯編解決階乘及大小寫轉(zhuǎn)換的問(wèn)題

    這篇文章主要介紹了ARM匯編解決階乘及大小寫轉(zhuǎn)換,包括ARM匯編大小寫轉(zhuǎn)換以及存入內(nèi)存的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-11-11
  • 淺析ELF轉(zhuǎn)二進(jìn)制允許把 Binary 文件加載到任意位置

    淺析ELF轉(zhuǎn)二進(jìn)制允許把 Binary 文件加載到任意位置

    本文通過(guò) eip + 偏移地址 實(shí)現(xiàn)了運(yùn)行時(shí)計(jì)算數(shù)據(jù)地址,不再需要把 Binary 文件裝載到固定的位置。本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2020-02-02
  • 純匯編實(shí)現(xiàn)打飛機(jī)小游戲的示例代碼

    純匯編實(shí)現(xiàn)打飛機(jī)小游戲的示例代碼

    這篇文章主要介紹了純匯編實(shí)現(xiàn)打飛機(jī)小游戲的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Go 中的循環(huán)是如何轉(zhuǎn)為匯編的(方法詳解)

    Go 中的循環(huán)是如何轉(zhuǎn)為匯編的(方法詳解)

    這篇文章主要介紹了Go 中的循環(huán)是如何轉(zhuǎn)為匯編的,本文通過(guò)循環(huán)的匯編代碼給大家講解的非常詳細(xì),代碼簡(jiǎn)單易懂,非常不錯(cuò),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05

最新評(píng)論