彙編學習 2

2021-08-28 08:33:10 字數 1856 閱讀 7050

1.輸入乙個無符號數,統計『0』的個數

unsigned int a;

int count;

printf("輸入乙個無符號整數:");

scanf("%u", &a);

_asm

2.輸入兩個字元(a7a6…a1a0和b7b6…b1b0),合併為16位無符號整數(a7b7a6b6…a1b1a0b0)。

char a, b;

unsigned short i;

printf("輸入兩個字元: ");

scanf("%c%c", &a, &b);

printf("a = %#x\n", a);

printf("b = %#x\n", b);

_asm

printf("合併後的資料為:%u = %#x\n", i, i);

3.輸入兩個整數,取絕對值作為新資料,交換高16位。

int a, b;

printf("a = ");

scanf("%d", &a);

printf("b = ");

scanf("%d", &b);

_asm

printf("new_a = %d\nnew_b = %d\n", a, b);

4.統計字串的英文本母、十進位制數和其他字元的個數。

char s[81];

int count_a, count_b, count_c;

scanf("%s", s);

_asm

printf("%d %d %d\n", count_a, count_b, count_c);

5.將字串反轉為逆序。

char s[81], sr[81];

scanf("%s", s);

_asm

printf("%s", sr);

6.刪除字串的非英文本元。

char s[81], sn[81];

scanf("%s", s);

_asm

printf("%s", sn);

7.將字串的所有小寫字母轉換為大寫(子程式實現)。

char s[81];

scanf("%s", s);

_asm

printf("小寫轉大寫處理後的字串:%s\n", s);

return;

_asm

8.將十進位制數轉換為ascll碼字串(子程式實現)。

unsigned int a;

char s[81];

printf("a = ");

scanf("%u", &a);

_asm

printf("轉化為字串為: %s\n", s);

return;

_asm

note1:

div reg 規則:

如果除數為 8 位,則被除數為 16 位,預設在 ax 中存放,運算結束後 al 儲存商, ah 儲存餘數;

如果除數為 16 位,則被除數為 32 位,dx 存放高 16 位,ax 存放低 16 位,運算結束後 ax 儲存商,dx 儲存餘數。

note2:

div正確執行是有條件的。這個條件是:被除數的高一半,必須小於除數。否則會出現除法溢位中斷。

比如本程式中輸入的數大於等於655360(即2^16的10倍,高16位大於等於10)時就會程式中斷。

彙編學習(2)

我們希望像顯示器輸出一段資訊,那麼必須將這段資訊寫到視訊記憶體中,顯示卡才能將它輸出到顯示器上。要向視訊記憶體中寫入資料,必須知道顯存在記憶體位址空間中的位址。從圖中可以看出,從位址0 9ffff的記憶體單元中讀取資料,實際上就是在讀取主隨機儲存器中的資料 向位址a0000 bffff的記憶體單元中...

彙編學習2

通過編寫乙個分解整數並顯示的乙個程式,來學習一些彙編的基礎指令和語法 處理器在加電或者復位以後,如果硬碟是首選的啟動裝置,那麼rom bios將試圖讀取硬碟的0面0道1扇區。這就是主引導扇區,會先把主引導扇區的 指令集 載入到記憶體,然後處理器來執行,一般主引導扇區是用來啟動作業系統的。但此次,我們...

彙編學習記錄2

組合語言的思路 函式的工作原理 1 常用指令 為了照顧到沒學過匯程式設計序的同志們,這裡簡單介紹一下常見的幾種彙編指令。a add 加法指令,第乙個是目標運算元,第二個是源運算元,格式為 目標運算元 目標運算元 源運算元 b sub 減法指令,格式同 add c call 呼叫函式,一般函式的引數放...