第乙個匯程式設計序hello world

2021-06-23 05:37:38 字數 1047 閱讀 7258

程式原始碼如下:

assume cs:code,ds:data ;定義**段和資料段框架

data segment  ;資料段

msg db "hello world";定義字串

data ends

code segment  ;**段

start: 

mov ax,data

mov ds,ax   ;資料段初始化

mov bx,0b800h ;將b800h位址空間拷貝到es段暫存器中

mov es,bx         ;b800h/資料不能直接拷貝到es中,用通用暫存器bs轉移給es

mov cx,11         ;將11賦給cs通用暫存器--字串迴圈11次

mov ah,01000010b  ;字元屬性紅底綠字

mov si,0

mov bx,0 ;初始化

s:mov al,ds:[si]     ;s:loop迴圈標號

mov es:[bx],al         ;es,ds 獲取第乙個字元位址,字元位址=段位址+偏移位址

mov es:[bx+1],ah    ;字元後面緊接字元屬性

inc si                       ;使ax 每次加1

add bx,2                  ;每次bx加2

loop s                      ;迴圈結束

mov ax,4c00h          ;防止一閃而過

int 21h 

code ends

end start

以下是執行結果:

感悟:匯編寫程式似乎有點難度,首先得知道很多暫存器,然後要知道如何使用暫存器,然後才能開工啊!就拿hello world為例,要把字元挨個拷貝到視訊記憶體位址空間才能顯示字元,因此要使用迴圈語句;在賦值是不能像平常語言一樣直接賦值,很多時候需要把值和資料傳給通用暫存器,然後再通過通用暫存器傳給其它特定暫存器。

01 第乙個匯程式設計序

在閱讀 x86組合語言 從實模式到保護模式 這本書的時候,從b站上看到 教程,使用虛擬機器然後將彙編檔案寫入磁碟0面0扇區,然後啟動,在螢幕輸出字元,這個程式本身就很簡單,之前學習過王爽的彙編,知道視訊記憶體位置08b00h,字低8位是ascii編碼,高8位是字元的顏色 但是在看 的 發現不同之處 ...

除錯第乙個匯程式設計序 下

接 除錯第乙個匯程式設計序 上 很抱歉,在此篇博文中我截了很多的圖,這樣便於講解清楚,各位也看得明白,但是現在我上傳的太多,不能再繼續上傳,以後一旦解禁,我會把缺失的補上。在watch標籤頁視窗中,我們在command命令視窗輸入了命令 ws 1,r0來監控r0暫存器的變化,在此就會顯示r0暫存器的...

組合語言03 第乙個匯程式設計序

整理自魚c論壇課件 匯程式設計序編寫步驟 編寫源 使用masm.exe進行編譯,產生目標檔案 用link.exe,對目標檔案進行鏈結,生成可執行檔案 可執行檔案中包含兩部分內容 1,程式和資料 2,相關的描述資訊 程式有多大,要占用多少記憶體空間等 源程式 assume cs abc abc seg...