彙編學習記錄---彙編環境搭建DOSBox+masm

最近在學習中用到彙編的部分知識,因而在筆記本(Win10)上搭建一個能夠編寫執行彙編代碼的環境,踩了一些坑,在此記錄一下簡單版的配置過程編程

1、下載文件

這裏須要的文件是DOSBox+MASM(包含部分可執行程序)文件夾,下面是兩者的下載連接windows

連接:https://pan.baidu.com/s/1gXPKTT-xKb6BpjOJdhmudA 密碼:khqsapp

連接:https://pan.baidu.com/s/177arSA34plWqV-iyffWpEw 密碼:3akdless

其中MASM需包含四個最基本的文件:debug.exe、edit,exe、link.exe、masm.exexss

masm.exe:彙編程序,用於彙編源程序(.asm),獲得目標程序(.obj);ide

link.exe:鏈接程序,用於鏈接目標程序,獲得可執行程序(.exe);工具

debug.exe:調試程序,用於調試可執行程序。oop

2、安裝軟件+DOSBox環境搭建

DOSBox的安裝直接下一步就ok學習

將masm放置在任意文件夾下:個人位置:E:\masm測試

爲了不每次都要掛載路徑,能夠將掛載命令寫入 dosbox-0.74.conf 文件中,路徑會顯示在DOSBox較大窗口上

掛載命令:

mount D E:\masm # D爲DOSBox的路徑,E:\masm 爲windows中放置masm文件的路徑
set path=$path$;E:\masm #配置環境變量

目前報錯內容:

(看網上其他經驗貼,都可以正常執行)

(目前我配置的環境變量有問題,在執行 masm 命令時顯示 )

 在配置完掛載內容後,每次打開就會自動將windows中的masm文件掛載到DOSBox中的D盤上了

測試DOSBox

一、 在掛載路徑(E:\masm)新建文件夾或文件

二、 打開DOSbox

三、 輸入D:進入DOSbox的D盤

四、 輸入dir查看是否有本身新建的文件夾或文件

五、 三、4步如果成功則說明掛載成功,不然不成功

六、 運行環境搭建完畢

3、執行代碼

在E:\masm 文件夾(此時已經包含masm.exe等共四個可執行文件)新建一個hello.asm文件(使用記事本添加便可,保存爲.asm格式文件)

具體內容爲

DATA SEGMENT
BUFFER DB "hello world", 0DH, 0AH
            DB "hello", 0DH, 0AH
            DB "hi", 0DH, 0AH, '$'
DATA ENDS
CODE   SEGMENT
           ASSUME CS:CODE, DS:DATA
START:      MOV AX, DATA
                MOV DS, AX
 
    MOV DX, OFFSET BUFFER   ;打印菜單
    MOV AH, 09H
    INT 21H
   
    MOV AH,4CH           ;退出程序
    INT 21H
CODE   ENDS
END START

執行代碼過程:

0. 在窗口中輸入D: 進入DOSBox的D文件夾

1. 在進入D文件夾後輸入命令 masm 後輸入 hello(文件名),注意 截圖中的紅色框爲輸入內容,綠色框爲 回車鍵

 

 2. 在上述執行過程後會生成hello.obj文件,此時輸入命令 link 後輸入 hello (文件名),操做方式同步驟1

因爲在上述代碼中未定義堆棧段,故在連接時會提示:LINK : warning L4021: no stack segment,因不會影響執行文件的生成,故暫時忽略

3. 在執行上述過程後會生成 hello.exe 可執行文件,此時直接輸入 hello.exe 變獲得打印結果,一套簡單的彙編代碼執行過程就結束了。

4、彙編代碼高亮設置

爲了觀感溫馨,避免使用文本文檔直接編輯帶來的語法錯誤,這裏採用 UltraEdit 進行彙編代碼的書寫

高亮過程以下

1.新建一個文本文檔(copy完如下內容後命名爲 masm.uew)

/L19"Assembly for MASM" Nocase Line Comment = ; File Extensions = ASM COD INB INC MAC /Delimiters = ~!%&^*()-+=|\/{}[]:;"'<> , /Function String = "%[a-zA-Z0-9_@?$]+[ ^t]+proc+[ ^t^p]" /C1"Instruction" .break .breakif .continue .else .elseif .endif .exit .if .repeat .startup .until .untilcxz .while aaa aad aam aas adc add and arpl bound bsf bsr bswap bt btc btr bts call cbw cdq clc cld cli clts cmc cmov cmp cmps cmpsb cmpsd cmpsw cmpxchg cmpxchg8b cpuid cwd cwde daa das dec div enter esc hlt idiv imul in inc ins insb insd insw int into invd invlpg invoke iret iretd ja jae jb jbe jc jcxz je jecxz jg jge jl jle jmp jna jnae jnb jnbe jnc jne jng jnge jnl jnle jno jnp jns jnz jo jp jpe jpo js jz lahf lar lds lea leave les lfs lgdt lgs lidt lldt lmsw lock lods lodsb lodsd lodsw loop loope loopne loopnz loopz lsl lss ltr mov movs movsb movsd movsw movsx movzx mul neg nop not oio or out outs outsb outsd outsw pop popa popad popf popfd push pusha pushad pushf pushfd pushw rcl rcr rdmsr rdtsc rep repe repne repnz repz ret retf retn rol ror rsdc rsldt rsm rsts sahf sal sar sbb scas scasb scasd scasw seta setae setb setbe setc sete setg setge setl setle setna setnae setnb setnc setne setng setnge setnl setnle setno setnp setns setnz seto setp setpe setpo sets setz sgdt shl shld shr shrd sidt sldt smsw stc std sti stos stosb stosd stosw str sub svdc svldt svts test verr verw wait wbinvd wrmsr xadd xchg xlat xlatb xor /C2"Preprocessor" %cond %out .186 .286 .286c .286p .287 .386 .386p .387 .486 .486c .486p .586 .586p .686 .686p .8086 .8087 .alpha .dosseg .code .const .cref .data .data? .err .err1 .err2 .errb .errdef .errdif .erre .fardata .fardata? .k3d .lall .lfcond .list .mmx .model .msfloat .nolist .nolistmacro .radix .sall .seq .sfcond .stack .type .xall .xcref .xlist @catstr @code @codesize @cpu @curseg @data @data? @datasize @date @environ @fardata @fardata? @filename @instr @interface @model @sizestr @stack @startup @substr @time @version @wordsize addr align and arg assume at basic byte c casemap catstr codeptr codeseg comm comment common compact dataptr db dd df dosseg dup dq dt dw dword echo else elseif elseifdef elseifidn elseifidni end endif endm endp ends epilogue epiloguedef eq equ even exitm export expr32 extern externdef extrn far far16 far32 farstack flat for forc fortran fword ge global goto group gt high highword huge ideal if if1 if2 ifb ifdef ifdif ifdifi ifidn ifidni ife ifnb ifndef include includelib instr integer irp irpc jumps label large le length lengthof listing local locals lroffset low lowword lt macro mask masm masm51 medium memory mm2word mmword model multerrs name near near32 nle nokeyword nolist nolocals noljmp nolocals nomasm51 none nonunique noscoped nosmart not nothing offset opattr option or org page para pascal popcontext private proc prologue prologuedef proto ptr public publicdll purge pushcontext pword quirks qword readonly real4 real8 real10 record rept req sbyte sdword seg segment shl short size sizeof shr small smart stack stdcall struc struct substr subtitle subttl sword symtype tbyte textequ this tiny title tword type typedef use16 use32 uses union vararg width word xor /C3"Coprocessor" f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmov fcom fcomp fcompp fcos fdecstp fdiv fdivp fdivr fdivrp ffree fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fly2x fly2xp1 fmul fmulp fnclex fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan fqrt frndint frstor fsave fscale fsin fsincos fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrb ftst fucom fucomp fucompp fwait fxam fxch fxtract /C4 ! % & * + , - // / > = < | /C5"Register" $ ? @@ @b @f ah al ax bh bl bp bx carry? ch cl cr0 cr2 cr3 cr4 cs cx dh di dl dr0 dr1 dr2 dr3 dr4 dr5 dr6 dr7 ds dx eax ebx ebp ecx edi edx es esi esp ext0 ext1 ext2 ext3 ext4 ext5 ext6 ext7 extb0 extb1 extb2 extb3 fs gs mm mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 overflow? parity? si sign? sp ss tr3 tr4 tr5 tr6 tr7 xmm xmm0 xmm1 xmm2 xmm3 xmm4 xmm5 xmm6 xmm7 zero? /C6 MMX 3DNow SIMD addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpps cmpss cmpunordps cmpunordss comiss cvtpi2ps cvtps2pi cvtsi2ss cvttps2pi cvttss2si cvtss2si divps divss emms femms fxrstor fxsave ldmxcsr maskmovq maxps maxss minps minss movaps movd movdf movdt movhps movhlps movlhps movlps movmskps movntps movntq movq movss movups mulps mulss orps packssdw packsswb packuswb paddb paddd paddsb paddsw paddusb paddusw paddw pand pandn pavgb pavgusb pavgw pcmpeqb pcmpeqd pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pextrw pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfsqit1 pfrsqrt pfsub pfsubr pi2fd pinsrw pmaddwd pmaxsw pmaxub pminsw pminub pmovmskb pmulhrw pmulhuw pmulhw pmullw por prefetch prefetchw prefetchnta prefetcht0 prefetcht1 prefetcht2 psadbw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd pxor pshufw rcpps rcpss rdpmc rsqrtps rsqrtss sfence shufps sqrtps sqrtss stmxcsr subps subss syscall sysret ucomiss unpckhps unpckps unpcklps xmmword xorps
View

2. 經過 %appdata%\IDMComp\UltraEdit\Wordfiles\ 查找 .uew文件保存位置

3. 肯定位置後,將步驟1保存的文檔移動到步驟2的位置,重啓UE

5、參考文獻

[1] 彙編語言編譯環境搭建

[2] 《在Win10下使用DOSBox+MASM32工具包搭建彙編環境》

[3] dosbox+masm彙編環境的安裝和使用

再次感謝 博文[3] 中免費提供的下載連接

相關文章
相關標籤/搜索