第一行組合語言的helloworld!

2021-10-25 04:11:16 字數 3096 閱讀 8195

今天1024耶!首先,祝大家節日快樂!!!

文章主題是敲下第一行組合語言的**,什麼?你還不會寫組合語言的helloworld?覺得引數字元太多,那沒事,框架直接給你,複製貼上即可,在那之前,讓我們一起了解一些東西。

.386

.model flat

exitprocess proto near32 stdcall, dwexitcode:dword

include io.h ; header file for input/output

cr equ 0dh ; carriage return character

lf equ 0ah ; line feed

.stack 4096 ; reserve 4096-byte stack

.data ; reserve storage for data

//在這裡定義變數

.code ; start of main program code

_start:

//在這裡寫**

invoke exitprocess, 0 ; exit with return code 0

public _start ; make entry point public

end ; end of source code

.386    //指明指令集

.model flat //程式工作模式, flat為windows程式使用的模式(**和資料使用同乙個4gb段)

exitprocess proto near32 stdcall, dwexitcode:dword //是乙個指示性語句。proto用來產生乙個函式,函式名字是:exitprocess,用於結束程式的系統函式。它有乙個引數dword型別的。

include io.h ; //指示彙編器拷貝一檔案io.h到程式中

cr equ 0dh ; //符號賦值語句,用符號代替數值使用。0dh回車符

lf equ 0ah ; //0ah 換行符,這個是ascall碼

.stack 4096 ; //指示彙編器執行時堆疊要保留多少位元組,通常是保留4096個位元組

.data ; //程式資料段的開始,該資料段中保留了變數的記憶體空間。

.code ; //標識這個程式的入口,即第一條要執行的語句的位址。

_start:

invoke exitprocess, 0 ; //呼叫子過程exitprocess的指令,它的功能是終止這個程式。

public _start ; //檔案中的名字通常只有在檔案中可以看到,該語句使得其後的名字可以在檔案外可見,_start是聯結器可以識別執行的第一條指令。

end ; //表示程式的結束,其後不能跟任何語句

看到上面都是**是不是很無趣呀,讓我們寫下第一行helloworld吧,在記事本裡面寫下**,另存為hello.asm檔案

; output hello,world

; author: threecat.up

.386

.model flat

exitprocess proto near32 stdcall, dwexitcode:dword

include io.h ; header file for input/output

cr equ 0dh ; carriage return character

lf equ 0ah ; line feed

.stack 4096 ; reserve 4096-byte stack

.data ; reserve storage for data

str1 byte 'hello,world!' ,0//定義字串變數

.code ; start of main program code

_start:

output str1//列印hello,world等字串

output str2

invoke exitprocess, 0 ; exit with return code 0

public _start ; make entry point public

end ; end of source code

我們在記事本(字尾名為.asm大小寫均可)裡面寫下這行**,然後當然是彙編鏈結執行啦。

首先彙編執行(進入你儲存hello.asm檔案的路徑):

ml /c /coff hello.asm
link /subsystem:console /entry:start /out:hello.exe hello.obj io.obj kernel32.lib
在dos裡面有:

看,列印出第一行**啦! 

之後也會陸續更新關於組合語言的知識,歡迎關注哦,溜了溜了,1024coding~

組合語言(一)

8086暫存器都是16位的暫存器,根據用途可分為4種型別。分別是資料暫存器 位址暫存器 段暫存器和控制暫存器。如圖所示 資料暫存器中每個暫存器又可以分為2個8位的暫存器。分別為ah al,bh bl,ch cl,dh dl。h表示高位元組 高8位 暫存器 l表示低位元組 低8位 暫存器。例如 用ax...

組合語言(一)

每一種微處理器都有自己的機器指令集 組合語言 由於很長的1與0難以辨別與記憶,所以誕生組合語言操作 暫存器bx的內容送到ax中 機器指令 1000100111011000 彙編指令 mov ax,bx組合語言由彙編指令,偽指令,其他符號 後兩者都不對應機器碼 分別對應 機器碼的助記符,編譯器執行,由...

C語言一行一行讀取檔案

c語言中,使用fgets函式可以一行行讀du取檔案。1 fgets函式 原型 char fgets char buf,int bufsize,file stream 功能 從檔案結構體指標stream中讀取資料,每次讀取一行。說明 讀取的資料儲存在buf指向的字元陣列中,每次最多讀取bufsize ...