vs編譯器內置匯編指令
㈠ 用vs2013怎麼編8086匯編語言
在 程序中 寫 __asm{} 括弧 內 寫匯編指令 可以在 C++中 內聯匯編
推薦 8086 工具用 emu8086 或者去下 radasm 32位匯編編譯器.
㈡ 如何學習VS2013環境的匯編語言
在程序中 F9 F10 分別 是 下斷 調試斷點 先F9下斷 F10調試 然後 下面會有調用 堆棧 的觀察窗口 對觀察窗口 右鍵 進入反匯編 就可以了. 還有個比較方便的方法 就是在程序 關鍵代碼處 寫入 __asm { mov eax,eax mov eax,eax mov eax,eax } 花指令
㈢ 如何在vs2017中編譯匯編。window10的系統
1.在vs中創建win32控制台應用程序項目
2.右擊項目,如圖,選擇生成依賴項-生成自定義
3.勾選masm
4.創建c++源文件,修改後綴為.asm
5.右擊項目,選擇項目屬性
㈣ 如何在vs2017中進行64位匯編的配置
先聲明一下,下面這個MASM 6.11安裝配置方法是為從實模式入門的初學者推薦的,本人親自試驗,屢試不爽。別嫌它長,其實並不難。不用說64位Windows,只要是DOSBox支持的操作系統,甚至OS X上都可以用這個辦法。執意從保護模式甚至x64開始入門匯編的麻煩繞道,更不要跑到我評論區里來,對初學者來說從實模式入門自有其好處。對於Win32匯編我只知道VS裝好以後命令行工具里有個ml.exe,其他的我暫時一概不懂,所以沒什麼可推薦的。
安裝DOSBox。
新建一個文件夾作為模擬DOS環境的C分區,這里假定為C:\Users\X\Documents\DOSBOX。
去MSDN I Tell You下載MASM 6.11,雙擊自解壓,然後將其中幾個名為DISK?(?是數字)的文件夾合並到一起,放在某個地方備用,假定為C:\Users\X\Downloads\MASM\DISKS。
在開始菜單里打開DOSBox-0.74\Options\DOSBox 0.74 Options,在末尾加上
MOUNT A C:\USERS\X\DOWNLOADS\MASM\DISKSMOUNT C C:\USERS\X\DOCUMENTS\DOSBOX
這兩行。
啟動DOSBox,執行
A:
SETUP
,開始安裝MASM 6.11。安裝時選擇「MS-DOS/Microsoft Windows」,除了Brief Capability以外其他的組件都裝上,其他選項保持默認值即可。
安裝完後將DOSBOX\MASM611\BIN下的NEW-VARS.BAT拷貝到DOSBOX目錄下來,打開前面提到的DOSBox 0.74 Options,將「MOUNT A ...」一行去掉。至此安裝和配置過程已結束。
以後每次使用時啟動DOSBox,先執行
C:NEW-VARS
,再切換到ASM文件所在的目錄,就可以使用MASM或LINK命令了。然後即可在DOSBox里運行(如果是32位Windows可以直接運行或DEBUG)生成的程序。如果想一步就生成可執行文件,可以用ML。另外強力推薦DOSBox Debugger,功能比Windows自帶的DEBUG強幾百倍,可以同時觀察寄存器、內存和指令,設置斷點等等。DOSBox的官方論壇上可以下載,放到DOSBox的安裝目錄下即可。啟動後執行HELP可查看其用法。
㈤ vs2010如何建立匯編程序
你只需要將文件後綴寫成.asm,編譯鏈接的時候VS可以自動識別的
其實最好用MASM先編譯好成目標文件,在你的VS項目中添加進來就好了。
㈥ 如何在c語言中嵌入匯編
以下所說嵌入的匯編都是GUN 的C語言中嵌入ARM匯編。
1)2個參數的內嵌語句
這種形式的匯編用於簡單的語句,參數限制輸入和輸出語法格式如下:
asm(code : output operand list : inputoperand list : clobber list);
匯編和C語句這間的聯系是通過上面asm聲明中可選的output operand list和input operand list。Clobber list後面再講。
下面是將C語言的一個整型變數傳遞給匯編,邏輯左移一位後在傳遞給C語言的另外一個整型變數。
/* Rotating bits example */
asm("mov %[result], %[value], ror#1" : [result] "=r" (y) : [value] "r" (x));
每一個asm語句被冒號(:)分成了四個部分。
匯編指令放在第一部分中的「」中間。
"mov %[result], %[value], ror #1"
接下來是冒號後的可選擇的output operand list,每一個條目是由一對[](方括弧)和被他包括的符號名組成,它後面跟著限制性字元串,再後面是圓括弧和它括著的C變數。這個例子中只有一個條目。
[result] "=r" (y)
接著冒號後面是輸入操作符列表,它的語法和輸入操作列表一樣
[value] "r" (x)
為了增加代碼的可讀性,你可以使用換行,空格,還有C風格的注釋。
asm("mov %[result], %[value], ror#1"
: [result]"=r" (y) /* Rotation result. */
: [value]"r" (x) /* Rotated value. */
: /* No clobbers */
);
在代碼部分%後面跟著的是後面兩個部分方括弧中的符號,它指的是相同符號操作列表中的一個條目。
%[result]表示第二部分的C變數y,%[value]表示三部分的C變數x;
符號操作符的名字使用了獨立的命名空間。這就意味著它使用的是其他的符號表。簡單一點就是說你不必關心使用的符號名在C代碼中已經使用了。在早期的C代碼中,循環移位的例子必須要這么寫:
asm("mov %0, %1, ror #1" :"=r" (result) : "r" (value))
在匯編代碼中操作數的引用使用的是%後面跟一個數字,%1代表第一個操作數,%2代碼第二個操作數,往後的類推。這個方法目前最新的編譯器還是支持的。但是它不便於維護代碼
實例代碼:
2) 帶.s文件的匯編
編譯命令:
arm-linux-gcc main.cAsmfile_gnu.s -o mains
main.c
#include<stdio.h>
extern voidpcm8_2_pcm16(unsigned char* pIn, int nInlen, short* pOut);
extern voidpcm16_2_pcm8(short* pIn, int nInlen,unsigned char* pOut);
int main()
{
unsigned char* pIn="1234";
short pInd[256];
unsigned char pOutd[256];
int nInlen=4;
int i = 0;
short pOut[256];
for(i=0;i<4;i++)
printf(" 0x%x ",pIn[i]);
printf(" ");
memset((char *)pOut,0,256*2);
memset((char *)pInd,0,256*2);
memset((char *)pOutd,0,256*2);
pcm8_2_pcm16(pIn,nInlen,pOut);
for(i=0;i<4;i++)
printf(" 0x%x ",pOut[i]);
printf(" ");
memcpy((char *)pInd,(char *)pOut,256*2);
pcm16_2_pcm8(pInd,nInlen,pOutd);
for(i=0;i<4;i++)
printf(" 0x%x ",pOutd[i]);
printf(" ");
return 0;
}
Asmfile_gnu.s
.text
.global pcm8_2_pcm16
.global pcm16_2_pcm8
#*******************************#
#********* ENCODER 實現將第一個輸入參數
#左移8位然後異或0x8000 然後拷貝到第三個參數
#DECODE 取第一個參數所指的數據先異或0x8000
#然後右移8位將數據拷貝到第三個參數
#*******************************
pcm8_2_pcm16:
MOV R6,#0
MOV R7,#0
ENCODER:
LDRB R5,[R0,R6]
MOV R8,R5,LSL#8
EOR R9,R8,#0x8000
STRH R9,[R2,R7]
ADD R7,R7,#2
ADD R6,R6,#1
SUB R1,R1,#1
CMP R1,#0
BNE ENCODER
B OVER
pcm16_2_pcm8:
MOV R6,#0
MOV R7,#0
DECODE:
LDRH R5,[R0,R6]
EOR R8,R5,#0x8000
MOV R9,R8,LSR#8
STRB R9,[R2,R7]
ADD R7,R7,#1
ADD R6,R6,#2
SUB R1,R1,#1
CMP R1,#0
BNE DECODE
OVER:
.end
㈦ c語言中如何調用匯編程序
1、如果匯編程序是可執行文件,比如exe文件,則可以使用system函數直接調用。比如下面的代碼,用system()打開windows上的記事本程序。
#include
#include
int main()
{
system("notepad.exe");
return 0;
}2、在C語言源碼中,可以通過內聯匯編來直接編寫匯編程序代碼。不同的編譯器使用內聯匯編的方法不同,vc/vs編譯器中一般使用__asm關鍵字來使用內聯匯編,gcc編譯器一般使用asm關鍵字來使用內聯匯編,以vc6.0為例,下面的代碼通過使用內聯匯編來計算1+1,並將結果保存到int型變數result中。
#include
int main()
{
int result;
_asm {
mov eax,1
mov ebx,1
add eax,ebx
mov result, eax
}
printf("1+1=%d\n", result);
return 0;
}
㈧ 有沒有人會在Visual Studio這個軟體里用匯編寫程序呀
樓上都說的比較詳細了。
Vc++編譯器cl.exe內嵌支持匯編指令(不支持宏匯編偽指令),在函數內部插入:
有兩種方式
__asm 一條指令
__asm {
指令
指令
}
相應行支持C++注釋。
這就是C++ NB的地方,VC++還有一條擴展特性 __naked ,有了它,就能人為控制函數生成的機器碼,而非由編譯器生成
㈨ VS2008中如何設置編譯器,使其在編譯代碼過程中生成匯編文件~
項目
->
屬性
->
C/C++
->
輸出文件
->
匯編輸出
這個默認是關閉的,VC生成的匯編格式實在太難看,遠不如調試的時候看
反匯編
來得簡潔。
㈩ 如何用Visual Studio 2008 建立匯編工程,編譯鏈接運行匯編程序
Segmented Executable Linker,Incermental Linker
首先MASM軟體包並不包含資源編輯器,資源編輯器值是當做Windows SDK的一部分來發布的,或者要從Micsoft Visual
Studio軟體包Common目錄中找到,更有甚者連接器Link竟然不是32位的,只能連接DOS程序...Incermental Linker只能在Visual C++目錄中找到。
其他一些有用工具也不在MASM的軟體包里,所以要使用MASM進行Win32匯編編程需要對軟體包進行改造,一方面要舍棄一些MASM軟體包的LInk,另一方面
,需要到其他地方去找資源編譯器和32位鏈接器等工具軟體。Win32編程用的一些鏈接庫導入文件MASM軟體包並沒有,同樣需要到VisualC++中去找,,MASM軟體包沒有自己的
頭文件,也不可能用c++的頭文件,需要自己根據資料整理Visualc++的.h文件整理出來,然而Windows的數據結構和預定義的數據多的是處了明的。MASM會是Win32編程非常難以下手。