日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用[bx+idata]的方式进行数组的处理

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用[bx+idata]的方式进行数组的处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[bx+idata]也就是[bx+數字]
如:ds:[bx+5]
指令mov ax,[bx+200]的含義
將一個內存單元的內容送入ax,這個內存單元的長度為兩個字節,存放一個字,偏移地址為bx中的數值加上200,段地址在ds中。
數學表示:(ax)=((ds)*16+(bx)+200)
該指令也可以寫成如下格式(常用):
mov ax,[200+bx]
mov ax,200[bx]
mov ax,[bx].200

題目:編寫代碼,將datasg定義中的第一個字符轉化為大寫,第二個字符轉化為小寫:

方法1:按照原來的方法,用[BX]的方式定位字符串中的字符

;編寫代碼,將datasg定義中的第一個字符轉化為大寫,第二個字符轉化為小寫 assume cs:codesg,ds:datasgdatasg segmentdb 'BaSiC'db 'MinIX' datasg endscodesg segment ;按照原來的方法,用[BX]的方式定位字符串中的字符 start:mov ax,datasgmov ds,axmov bx,0mov cx,5 upLetter:mov al,ds:[bx]and al,11011111B;小寫變大寫(將al的第五位變成0)mov ds:[bx],alinc bxloop upLettermov bx,5mov cx,5 downLetter:mov al,ds:[bx]or al,00100000B;大寫變小寫(將al的第五位變成1)mov ds:[bx],alinc bxloop downLettermov ax,4c00hint 21hcodesg ends end start

方法2:有了【bx+idata】的方式可以變得更簡化

思路:觀察datasg段中的兩個字符串,一個起始地址為0,另一個起始地址為5.
我們可以將這兩個字符串看成兩個數組,一個從0地址開始存放,一個從5開始
那么,我們就可以用[0+bx]和[5+bx]的方式在同一個循環中定位這兩個字符串中的字符。
在這里,0和5給定了兩個字符串的起始偏移地址,bx中給出了從起始偏移地址開始的相對地址。
這兩個字符串在內存中的起始地址是不一樣的,但是,他們中的每一個字符,從起始地址開始的相對地址的變化是相同的。

;編寫代碼,將datasg定義中的第一個字符轉化為大寫,第二個字符轉化為小寫 assume cs:codesg,ds:datasgdatasg segmentdb 'BaSiC'db 'MinIX' datasg endscodesg segment ;按照新的方法,用[BX+數字]的方式定位字符串中的字符 start:mov ax,datasgmov ds,axmov bx,0mov cx,5changeLetter:mov al,[bx] ;定位第一個字符串中的字符and al,11011111bmov [bx],almov al,[5+bx];定位第二個字符串中的字符or [5+bx],alinc bxloop changeLettermov ax,4c00hint 21hcodesg ends end start

比較C程序和匯編程序的相似之處:
C語言:a[i] , b[i]
匯編語言:0[bx] , 5[bx]
通過比較可以發現,[bx+idata]的方式為高級語言實現數組提供了便利機制。

總結

以上是生活随笔為你收集整理的用[bx+idata]的方式进行数组的处理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。