亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍

我的匯編學習之路(1):指令
來源:易賢網(wǎng) 閱讀:1718 次 日期:2015-04-02 14:09:40
溫馨提示:易賢網(wǎng)小編為您整理了“我的匯編學習之路(1):指令”,方便廣大網(wǎng)友查閱!

引言

我們很多人是開發(fā)者,每天寫大量的代碼,有時也不是糟糕的代碼。每個人都能很輕松寫下這樣的代碼:

#include <stdio.h>

int main() {

int x = 10;

int y = 100;

printf("x + y = %d", x + y);

return 0;

}

大家都能理解上面這段 C 語言代碼完成的功能,但是…這段代碼底層是如何工作的呢?我想我們中間不是所有人都能回答這個問題,我也不能。我認為我可以用高級編程語言寫代碼,例如 Haskell、Erlang、Go 等等,但是我完全不知道在編譯之后它在底層是如何工作的。所以,我決定往下再深入一步,到匯編這個層次,并且記錄下我的學習匯編之路。希望這是有趣的過程,而不是僅僅對我一個人。大約五、六年前我已經(jīng)使用過匯編來寫簡單的程序,那時我還在上大學,用的是 Turbo 匯編和 DOS 操作系統(tǒng)。現(xiàn)在我使用 Linux-x86_64 操作系統(tǒng),是的,64 位 Linux 和 16 位 DOS 肯定有很大的不同。那我們就開始吧。

準備階段

在開始之前,我們需要準備一些我接下來要提到的東西。我使用的是 Ubuntu(Ubuntu 14.04.1 LTS 64 位) 系統(tǒng),因此我的文章都是基于該操作系統(tǒng)和體系結(jié)構(gòu)的。不同的 CPU 支持不同的指令集,我使用的是 Intel Core i7 870 處理器,所有代碼都在這上面運行。另外我將用 nasm 匯編,你可以用下面命令來安裝:

sudo apt-get install nasm

I它的版本應該是 2.0.0 或者更高了。我是用的是 2013年12月29日編譯的 NASM version 2.10.09 版本。最后一部分,你需要一款寫匯編代碼的文本編輯器,我使用配有 nasm-mode.el 的 Emacs 編輯器。當然這不是強制性的,你可以選擇任何你喜歡的文本編輯器。如果你像我一樣使用的是 Emacs,你可以下載 nasm-mode.el,將你的 Emacs 配置成這樣:

(load "~/.emacs.d/lisp/nasm.el")

(require 'nasm-mode)

(add-to-list 'auto-mode-alist '(".(asm|s)$" . nasm-mode))

這就是目前我們需要準備的所有東西,其它工作在接下來的文章中會提到。

x64 語法

這里我就不全面介紹匯編的語法了,我們僅提一下這篇文章中用到的語法。通常 NASM 程序會被劃分為不同的段(section),這篇文章中我們會涉及到兩個段:

數(shù)據(jù)段(data section)

代碼段(text section)

數(shù)據(jù)段用來定義常量(constant),常量是在運行時不會改變的數(shù)據(jù)。你可以定義數(shù)字或其他常量等等,聲明一個數(shù)據(jù)段的語法如下:

section .data

代碼段是存放代碼(code)的,該段必須以 global_start 開始,告訴內(nèi)核這里是程序開始執(zhí)行的地方。

section .text

global _start

_start:

注釋是以 ; 開始。每個 NASM 代碼行包含下面四個字段的組合:

[label:] instruction [operands] [; comment]

中括號括起來的字段表示是可選的。基本 NASM 指令由兩部分組成,第一部分是需要執(zhí)行指令的名字,第二部分是該指令的操作數(shù)。例如:

MOV COUNT, 48 ;將數(shù)值 48 存放到 COUNT 變量中

Hello world

讓我們用 NASM 匯編來寫第一個程序吧,當然是傳統(tǒng)的打印 “Hello world” 的程序。這是代碼:

section .data

msg db "hello, world!"

section .text

global _start

_start:

mov rax, 1

mov rdi, 1

mov rsi, msg

mov rdx, 13

syscall

mov rax, 60

mov rdi, 0

syscall

的,看起來不像 printf(“Hello world”),我們試著去理解它是什么、怎么工作的。先看 1-2 行,我們定義了一個數(shù)據(jù)段,并且有一個 msg 常量,值為 Hello world,那么我們就可以在代碼中使用這個常量了。下一步是定義了一個代碼段,以及程序的入口,代碼從第 7 行開始執(zhí)行。現(xiàn)在到了程序最有意思的部分了。我們已經(jīng)了解了 mov 指令的功能,它帶有兩個操作數(shù),將第二個操作數(shù)的值放到第一個操作數(shù)中。但是,rax、rdi 等等這些是什么呢?我們找到維基百科的解釋:

中央處理單元(CPU)是計算機中的硬件,它讀取計算機程序中的指令,完成系統(tǒng)中基本的算術(shù)、邏輯、輸入/輸出操作。

好了,CPU 完成一些操作,例如算術(shù)操作等,但是它從哪獲得操作的數(shù)據(jù)呢?第一個答案是內(nèi)存。然而從內(nèi)存中讀取和存入數(shù)據(jù)的速度遠遠低于處理器的速度,它涉及到復雜的通過控制總線來發(fā)送數(shù)據(jù)請求的過程。因此,CPU 有其內(nèi)部的存儲位置,稱為寄存器(register)。

x64_registers

那么我們寫 mov rax, 1,意思是將 1 放到 rax 寄存器中。現(xiàn)在我們知道什么是 rax、rdi、rbx 等等了吧,但是還需要知道什么時候使用 rax,什么時候使用 rsi 等等。

rax —— 臨時寄存器,當我們調(diào)用系統(tǒng)調(diào)用時,rax 保存系統(tǒng)調(diào)用號

rdx —— 用來向函數(shù)傳遞第三個參數(shù)

rdi —— 用來向函數(shù)傳遞第一個參數(shù)

rsi —— 用來向函數(shù)傳遞第二個參數(shù)的指針

換句話說,我們就是調(diào)用了 sys_write 系統(tǒng)調(diào)用,該函數(shù)原型是:

ssize_t sys_write(unsigned int fd, const char *buf, size_t count)

它有三個參數(shù):

fd —— 文件描述符,0、1、2 分別代表標準輸入、標準輸出和標準錯誤

buf —— 字符數(shù)組的指針,用來保存從 fd 指向的文件中獲取的內(nèi)容

count —— 表示要從文件中讀入到字符數(shù)組的字節(jié)數(shù)

我們知道 sys_write 系統(tǒng)調(diào)用帶有三個參數(shù),它在系統(tǒng)調(diào)用表中有一個系統(tǒng)調(diào)用號。我們再看看程序的實現(xiàn),將 1 放到 rax 寄存器中,它意思是我們使用 sys_write 系統(tǒng)調(diào)用;下一行將 1 存到 rdi 寄存器,它是 sys_write 的第一個參數(shù),1 代表標準輸出;然后我們將 msg 的指針存到 rsi 寄存器中,這是 sys_write 的第二個參數(shù) buf;接著我們傳遞 sys_write 最后一個參數(shù)(字符串的長度)到 rdx 寄存器中。現(xiàn)在,我們有了 sys_write 的所有參數(shù),就可以在 11 行使用 syscall 來調(diào)用它了。好了,我們打印出 “Hello world” 字符串,現(xiàn)在需要從程序中正確退出。我們傳遞 60 到 rax 寄存器,60 是 exit 的系統(tǒng)調(diào)用號;以及將 0 傳遞給 rdi 寄存器,這是錯誤碼,0 表示我們的程序正確地退出。這就是 “Hello world” 的所有分析,相當簡單吧:)現(xiàn)在我們編譯程序,假設(shè)我們的程序放在 hello.asm 文件中,那么我們需要運行下面的命令來執(zhí)行:

nasm -f elf64 -o hello.o hello.asm

ld -o hello hello.o

編譯鏈接完成之后,我們得到可執(zhí)行文件 hello,可以使用 ./hello 來運行,可以在終端看到輸出 “Hello world”。

總結(jié)

本文用一個簡單不能再簡單的程序開始第一部分,接下來我們會看到一些算術(shù)運算。如果你有任何問題或者建議可以給我評論。

更多信息請查看IT技術(shù)專欄

更多信息請查看技術(shù)文章
易賢網(wǎng)手機網(wǎng)站地址:我的匯編學習之路(1):指令
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權(quán)所有:易賢網(wǎng)

亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍
欧美一区免费| 国内一区二区三区在线视频| 亚洲一区三区在线观看| 亚洲视频大全| 亚洲在线黄色| 欧美日韩三级| 野花国产精品入口| 久久免费99精品久久久久久| 国产一区美女| 国产精品久久国产三级国电话系列| 国产日韩欧美亚洲一区| 欧美激情 亚洲a∨综合| 亚洲精品四区| 久久久福利视频| 伊人久久婷婷| 欧美在线免费| 宅男噜噜噜66国产日韩在线观看| 久久精品国语| 一区二区av| 国产综合自拍| 鲁大师影院一区二区三区| 国内一区二区三区| 久久精品中文| 一区二区三区成人精品| 国产精品黄色| 午夜精品视频| 久久国产一区二区| 在线综合亚洲| 99国产精品久久久久老师| 欧美1区2区3区| 亚洲一区二区三区午夜| 亚洲国产精品www| 欧美精品成人一区二区在线观看| 国产欧美丝祙| 亚洲成色精品| 国模精品一区二区三区| 久久综合中文| 免费日韩视频| 午夜在线观看免费一区| 国产亚洲在线| 亚洲黄色成人| 亚洲欧洲一区二区天堂久久| 欧美婷婷在线| 黄色成人91| 欧美午夜精品理论片a级大开眼界| 亚洲欧美日韩专区| 久久av免费一区| 亚洲一区欧美二区| 国产伦精品一区二区三区高清版| 亚洲啪啪91| 亚洲乱亚洲高清| 亚洲美女91| 亚洲国产精品综合| 夜久久久久久| 免费久久99精品国产自在现线| 国产精品女主播一区二区三区| 亚洲每日更新| 亚洲永久网站| 欧美va亚洲va日韩∨a综合色| 久久本道综合色狠狠五月| 亚洲一区在线直播| 欧美成人tv| 国产精品v日韩精品v欧美精品网站| 亚洲欧美亚洲| 亚洲国产精品久久久久久女王 | 亚洲国产精品毛片| 亚洲大片av| 国产精品日韩欧美一区| 另类av一区二区| 国内精品亚洲| 国产精品有限公司| 女人色偷偷aa久久天堂| 亚洲视频高清| 亚洲欧美成人| 精久久久久久| 亚洲伊人网站| 亚洲午夜精品久久久久久浪潮 | 亚洲欧美国产不卡| 午夜性色一区二区三区免费视频 | 欧美日本中文| 99精品视频免费观看视频| 国产精品一区二区a| 欧美日本一区| 国产九九精品| 欧美日本韩国在线| 国产亚洲精品久久飘花| 午夜欧美精品久久久久久久| 亚洲国产一区二区三区a毛片| 国产一区二区高清不卡| 黄色av一区| 久久亚洲风情| 在线视频亚洲| 国产主播一区| 久久一二三区| 国产精品普通话对白| 欧美激情视频一区二区三区在线播放| 亚洲黄色高清| 欧美日韩一区在线播放| 亚洲影视综合| 国产日韩欧美| 一本综合久久| 一本色道久久综合亚洲精品婷婷 | 欧美日韩亚洲一区二区三区四区| 免费视频一区| 99热免费精品在线观看| 国产精品jizz在线观看美国| 亚洲综合不卡| 国产毛片久久| 国产日韩亚洲欧美精品| 亚洲国产美女| 亚洲国产第一| 亚洲国产1区| 精品不卡在线| 国内精品久久国产| 欧美大香线蕉线伊人久久国产精品| 亚洲伦伦在线| 在线亚洲伦理| 午夜在线视频一区二区区别| 新67194成人永久网站| 中国成人亚色综合网站| 欧美三日本三级少妇三99| 久久在线91| 欧美一区高清| 国产精品a级| 91久久黄色| 亚洲精品视频啊美女在线直播| 国产一区视频观看| 亚洲日韩视频| 一区二区三区四区五区精品视频| 国产日韩欧美在线播放不卡| 亚洲一区区二区| 快she精品国产999| 欧美另类综合| 在线国产欧美| 国产精品久久久久久久久婷婷| 一道本一区二区| 久久福利毛片| 欧美区一区二| 亚洲精品在线观看免费| 亚洲一区3d动漫同人无遮挡| 欧美aa国产视频| 在线观看日韩av电影| 国产一区二区三区久久| 久久中文在线| 亚洲精品在线二区| 久久亚洲电影| 伊人婷婷久久| 久久国产精品久久精品国产| 欧美日韩调教| 国产精品午夜av在线| 久久久久国产精品午夜一区| 午夜精品亚洲| 一区二区三区四区五区视频| 久久人人精品| 亚洲色图自拍| 国内一区二区三区在线视频| 国产精品久久久久久模特| 欧美在线二区| 亚洲一区二区免费看| 欧美天天在线| 奶水喷射视频一区| 伊人影院久久| 欧美va天堂| 性色一区二区三区| 亚洲国产精品视频一区| 午夜精品偷拍| 久久在线精品| 亚洲欧美视频| 亚洲最黄网站| 亚洲精品精选| 狠狠爱综合网| 欧美国产日本| 欧美一区综合| 欧美 日韩 国产在线| 亚洲一区图片| 亚洲一区二区三区涩| 日韩一级大片| 一区久久精品| 精品96久久久久久中文字幕无| 久久久一本精品99久久精品66| 99热这里只有成人精品国产| 在线播放精品| 激情成人综合| 国产精品99一区二区| 欧美一区二区视频在线| 久久国产一二区| 欧美综合二区| 久久激情网站| 久久综合图片| 女生裸体视频一区二区三区| 久久午夜影视| 欧美日本一区| 狠色狠色综合久久| 在线观看一区视频| 99精品欧美| 国产亚洲第一区| 午夜亚洲性色福利视频| 久久三级福利| 国产精品初高中精品久久| 欧美视频日韩| 亚洲黄色一区| 亚洲自啪免费| 欧美一区免费| 激情久久五月| 国产亚洲激情| 欧美凹凸一区二区三区视频| 欧美精品午夜| 亚洲国产激情| 亚洲综合另类| 欧美日韩国产不卡在线看| 国精品一区二区| 9久re热视频在线精品| 国产精品美女久久久| 久久一区欧美| 亚洲高清视频在线观看| 亚洲一区二区三区在线观看视频| 麻豆成人av| 国产精品www994| 国产日韩一区二区| 欧美精品aa| 夜夜嗨av一区二区三区网站四季av| 亚洲影视综合| 激情偷拍久久| 亚洲一区观看| 黑人巨大精品欧美一区二区小视频| 国产精品v亚洲精品v日韩精品| 亚洲激情偷拍| 久久久久se| aⅴ色国产欧美| 欧美日韩亚洲一区二区三区在线 | 国产日韩欧美| 欧美高清视频一区| 日韩视频精品| 欧美成人国产| 国产一区二区三区免费不卡| 国产一区二区三区自拍| 亚洲在线国产日韩欧美| 黄色亚洲大片免费在线观看| 亚洲欧美久久久| 精品电影一区| 欧美激情 亚洲a∨综合| 日韩午夜高潮| 国内视频精品| 欧美成人在线免费观看| 亚洲尤物精选| 国产精品美女久久久浪潮软件| 国产精品国产精品| 欧美jizzhd精品欧美巨大免费| 国产欧美日韩综合精品二区| 在线免费观看欧美| 欧美日韩1080p| 久久一二三四| 久久亚洲国产精品日日av夜夜| 99视频+国产日韩欧美| 激情综合电影网| 国内揄拍国内精品久久| 欧美日韩喷水| 欧美日韩精品免费观看视频完整| 久久精品中文| 久久久久国产精品一区三寸 | 亚洲一区三区在线观看| 中文久久精品| 99av国产精品欲麻豆| 好看的日韩av电影| 国产精品v日韩精品v欧美精品网站| 久久久久久久久久久一区| 国产农村妇女精品一二区| 国产欧美日韩综合一区在线观看| 伊人成年综合电影网| 亚洲视屏一区| 亚洲国产日韩美| 一本久久知道综合久久| 国产区日韩欧美| 国产欧美亚洲日本| 亚洲欧美国产精品桃花| 西西裸体人体做爰大胆久久久| 亚洲精品女人| 午夜综合激情| 午夜日韩激情| 激情国产一区| 国产日韩精品一区观看| 亚洲一区二区网站| 久久久99爱| 国产综合久久| 99热这里只有成人精品国产| 国产亚洲午夜| 女女同性女同一区二区三区91 | 香蕉久久夜色精品| 欧美在线三区| 激情亚洲网站| 亚洲一区二区动漫| 欧美伊人影院| 亚洲国产99| 国产农村妇女精品一二区| 久久精品麻豆| 亚洲国产日韩综合一区| 亚洲深夜激情| 欧美日韩喷水| 国产视频亚洲| 狠狠色狠狠色综合人人| 亚洲一区日韩在线| 狠狠色综合色区| 免费日韩视频| 亚洲欧洲综合| 欧美成人一区二区在线| 一本一道久久综合狠狠老精东影业| 蜜桃av久久久亚洲精品| 亚洲人成久久| 欧美黄色一区| 香蕉亚洲视频| 99精品99| 国产一区在线免费观看| 欧美一级网站| 亚洲国产二区| 国产一区二区三区无遮挡| 久久国产精品毛片| 一区二区三区四区五区在线| 国产一区二区三区无遮挡| 美女日韩在线中文字幕| 亚洲少妇在线| 亚洲毛片一区| 国产综合第一页| 欧美福利一区二区三区| 午夜在线观看免费一区| 亚洲国产欧洲综合997久久| 欧美精品99| 久久九九精品| 男人的天堂亚洲| 国产精品视区| 国产精品女主播一区二区三区| 亚洲激情影院| 亚洲国产日韩美| 在线精品亚洲一区二区| 国产精品v亚洲精品v日韩精品 | 妖精视频成人观看www| 一区二区视频在线观看| 欧美激情视频一区二区三区免费| 国产一级精品aaaaa看| 亚洲福利电影| 精品99视频| 精品电影一区| 国产精品v一区二区三区| 午夜天堂精品久久久久| 欧美精品二区| 欧美精品一区二区三区久久久竹菊| 蜜桃精品久久久久久久免费影院| 国产精品一区二区在线观看| 国产精品美女久久久| 亚洲欧美日产图| 午夜在线精品| 欧美一区久久| 国产精品国产三级欧美二区| 黄色亚洲在线| 日韩视频在线一区二区三区| 亚洲精品国产系列| 中文高清一区| 久久精品一区二区三区中文字幕 | 久久久水蜜桃| 午夜精品电影| 影音先锋中文字幕一区| 99re6热在线精品视频播放速度| 亚洲精品人人| 亚洲一区二区毛片| 久热精品视频| 亚洲国产成人不卡| 午夜一区在线| 国产精品a级| 夜夜精品视频| 久久激情一区| 亚洲一二三区在线| 国产精品一二| 欧美成人午夜| 亚洲高清不卡| 久久精品一区二区三区中文字幕| 欧美日韩一区二区视频在线| 在线国产精品一区| 久久aⅴ国产紧身牛仔裤| 国产一区自拍视频| 亚洲免费中文| 亚洲无吗在线| 羞羞答答国产精品www一本| 国模大胆一区二区三区| 国产日韩一区| 亚洲天堂偷拍| 美脚丝袜一区二区三区在线观看| 韩国久久久久| 亚洲在线视频| 亚洲精品一区二区三区樱花| 欧美~级网站不卡| 国产精品一区在线观看| 亚洲午夜高清视频| 欧美在线网站| 亚洲一区二区在线看| 亚洲成人在线视频网站| 欧美一区亚洲| 免费在线亚洲欧美| 国产欧美日韩一区二区三区| 欧美日韩hd| 欧美影院一区| 蜜桃久久精品乱码一区二区|