彙編程序的編寫與高級語言的不一樣,就在於有不少寄存器級別的運算,代碼中al、bl實際上是2個寄存器,就至關於一個定義好的全局變量,並且在進行某些操做以後,寄存器會被清空,這是編寫程序的時候須要注意的。爲了方便演示,咱們直接將結果簡化爲對應ascii碼的數字,方便顯示。初始運算變量dst中30h表明16進制,也就是16*3=48,第一個加法程序中咱們計算dst + 7,也就是48+7=55,意味着ascii碼中對應的數字7。最終輸出結果爲7證實了咱們的計算是對的。去掉了繁瑣的數字轉換,迴歸最淳樸的彙編計算,能夠更深刻地理解本質。python
代碼爲:編程
.386 .model flat, stdcall option casemap :none include windows.inc include kernel32.inc include masm32.inc includelib kernel32.lib includelib masm32.lib .data ; ============= 數據定義部分 ====================== ; 定義一個叫作HelloWorld的變量,變量類型是db?變量內存儲hello world字符串,並以結束符0結尾 HelloWorld db "Hello World!", 0 ; 定義一個叫作buffer的db類型 buffer db 31h,32h,33h,34h,35h,36h,37h,38h,0 dst db 30h enter1 db 0ah,0 ; 定義一個換行符並以回車結尾 tmp db 0 .code ; ============= 代碼部分 ========================== main PROC mov al, dst ADD al, 7 mov tmp, al invoke StdOut,addr tmp invoke StdOut,addr enter1 mov al, dst ADD al, 7 SUB al, 4 mov tmp, al ; tmp = al且清空al,此時再對al做任何運算都是無效的? invoke StdOut,addr tmp invoke StdOut,addr enter1 ; ---------------------------------- ; 25和2小於255,能夠作8位乘法,程序以下。 mov al,2 ; al = 2 (其中al爲低位寄存器,至關於臨時內存空間) mov bl,25 ; bl = 25 mul bl ; al = al * bl (al變化了,bl沒變) mov tmp, al ; tmp = al ----> 要移出寄存器才能讀取乘完後獲得的結果 invoke StdOut,addr tmp invoke StdOut,addr enter1 ; ---------------------------------- mov al, 112 ; al = 112 mov bl, 2 ; bl = 2 div bl ; al = al / bl ---> 112 / 2 = 56 -----> ascii裏的數字8 mov tmp, al ; tmp = al 且清空al -------> 要移出寄存器才能讀取乘完後獲得的結果 invoke StdOut,addr tmp invoke StdOut,addr enter1 invoke StdOut, addr HelloWorld invoke StdOut,addr enter1 invoke StdOut,addr buffer invoke StdOut,addr enter1 invoke StdIn, addr buffer, sizeof buffer invoke StdOut,addr buffer invoke ExitProcess, 0 main ENDP END main
輸出結果爲windows
7 3 2 8 Hello World! 12345678