汇编语言随笔(6)-大小写转换与实验6(双重循环:需要保存cx值)
生活随笔
收集整理的這篇文章主要介紹了
汇编语言随笔(6)-大小写转换与实验6(双重循环:需要保存cx值)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
大小寫轉換
??????規律:大寫字母的ASCII值+20H=小寫字母的ASCII值。在ASCII值中,大寫字母第5位為0,小寫字母第5位為1。所以通過and、or指令可以方便地進行大小寫轉換,而不需要提前判斷字母的大小寫。
??????如:將al中的字符改為大寫字母的方法:and al,11011111B
??????將al中的字符改為小寫字母的方法:or al,00100000B
實驗6
??????將datasg段中的每個單詞的前4個字母改為大寫字母。
assume cs:codesg,ds:datasg,ss:stacksgstacksg segmentdw 0,0,0,0,0,0,0,0stacksg endsdatasg segmentdb '1. display ' 每個字符串的長度剛好是16字節db '2. brows 'db '3. replace 'db '4. modify 'datasg endscodesg segmentstart:mov ax,datasgmov ds,ax 初始化數據段mov ax,stacksgmov ss,axmov sp,10h 初始化棧段mov bx,0mov cx,4 一共4行s: mov si,3 每一行中的第一個起始字符的下標push cx 將外層的循環次數入棧mov cx,4 每一行共計4個字符需要改動s0:mov al,[bx+si]and al,11011111Bmov [bx+si],alinc siloop s0pop cx 將外層的循環次數出棧add bx,10hloop smov ax,4c00hint 21hcodesg endsend start做一點小改動
??????將datasg段中的每個單詞改為大寫字母。(提示:空格的ASCII值為20h,要用到前面講過的條件轉移指令jcx或je)
assume cs:codesg,ds:datasg,ss:stacksgstacksg segmentdw 0,0,0,0,0,0,0,0stacksg endsdatasg segmentdb '1. display ' 每個字符串的長度剛好是16字節db '2. brows 'db '3. replace 'db '4. modify 'datasg endscodesg segmentstart:mov ax,datasgmov ds,ax 初始化數據段mov ax,stacksgmov ss,axmov sp,10h 初始化棧段mov bx,0mov cx,4 一共4行s: mov si,3 每一行的第一個字符起始地址為3push cx 將外層的循環次數入棧s0:mov cl,[bx+si] //mov al,[bx+si]mov ch,0sub cx,20h //cmp al,20h 判斷是否為空格字符jcxz done //je done 如果是的話表示本行的所有字符都已經轉換過了,進入下一行mov al,[bx+si]and al,11011111Bmov [bx+si],alinc sijmp short s0done:pop cx 將外層的循環次數出棧add bx,10hloop smov ax,4c00hint 21hcodesg endsend start總結
以上是生活随笔為你收集整理的汇编语言随笔(6)-大小写转换与实验6(双重循环:需要保存cx值)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编语言随笔(5)-and、or指令,串
- 下一篇: 汇编语言随笔(7)-访问内存的寻址方式和