• 汇编学习记录---汇编环境搭建DOSBox+masm


    最近在学习中用到汇编的部分知识,于是在笔记本(Win10)上搭建一个可以编写执行汇编代码的环境,踩了一些坑,在此记录一下简单版的配置过程

    一、下载文件

    这里需要的文件是DOSBox+MASM(包含部分可执行程序)文件夹,下面是二者的下载链接

    链接:https://pan.baidu.com/s/1gXPKTT-xKb6BpjOJdhmudA 密码:khqs

    链接:https://pan.baidu.com/s/177arSA34plWqV-iyffWpEw 密码:3akd

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

    masm.exe:汇编程序,用于汇编源程序(.asm),得到目标程序(.obj);

    link.exe:连接程序,用于连接目标程序,得到可执行程序(.exe);

    debug.exe:调试程序,用于调试可执行程序。

    二、安装软件+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

    1、 在挂载路径(E:masm)新建文件夹或文件

    2、 打开DOSbox

    3、 输入D:进入DOSbox的D盘

    4、 输入dir查看是否有自己新建的文件夹或文件

    5、 3、4步若是成功则说明挂载成功,否则不成功

    6、 运行环境搭建完毕

    三、执行代码

    在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 变得到打印结果,一套简单的汇编代码执行过程就结束了。

    四、汇编代码高亮设置

    为了观感舒适,避免使用文本文档直接编辑带来的语法错误,这里采用 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%IDMCompUltraEditWordfiles 查找 .uew文件保存位置

    3. 确定位置后,将步骤1保存的文档移动到步骤2的位置,重启UE

    五、参考文献

    [1] 汇编语言编译环境搭建

    [2] 《在Win10下使用DOSBox+MASM32工具包搭建汇编环境》

    [3] dosbox+masm汇编环境的安装和使用

    再次感谢 博文[3] 中免费提供的下载链接

    本人计算机小白一枚,对编程有浓厚兴趣,在此贴出自己的计算机学习历程,还有很多不足,望多多指教! 读书后发现好多的内容与具体专业有偏差,没来得及完成,虽然“有时间我就会做...”是人生最大的谎言,但有时间我会继续搞定未完成的内容,有始有终,兴趣使然!
  • 相关阅读:
    绑定下拉列表
    部署WSP出现错误—已在此服务器场中安装ID为XXXXX的功能
    sharepoint权限
    sql日期操作
    Sql脚本动态创建表
    sharepoint中添加子网站
    解决未知的服务器标记“asp:ListView”。
    sharepoint中新添加页面
    vue中使用localStorage存储信息
    Js事件大全
  • 原文地址:https://www.cnblogs.com/Robin5/p/12336724.html
Copyright © 2020-2023  润新知