⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 masm6

📁 一套关于加解密的文件
💻
字号:
MASM 6.x 新增指令列表:  MASM 6.x 推出以久,但市面上有关之书籍及资料却少得可怜,小弟当初接触MASM 6.x 时,辛辛苦苦才找出资料的,为了那些後进不用踏着先烈的血迹前扑後继,特将小弟「翻」出来的东东公布出来。MASM 6.x与MASM 5.x最大不同,在於6.x 比5.x 更高阶化了(或说更PASCAL化),其内提供了判断、循环、模组化副程式等,各种令组合语言使用者望穿秋水之指令,看完内容,请不要感动的痛哭流涕,或恨他为什麽不早点出来。运算符号:    == : 等於        &  : 位元测试    != : 不等於      !  : 否 NOT    >  : 大於        && : 且 AND    <  : 小於        || : 或 OR辅助运算符号:    ZERO?     : ZERO ZF=1,ZR        !ZERO?     : NOT ZERO ZF=0,NZ    CARRY?    : CARRY CF=1,CY       !CARRY?    : NOT CARRY CF=0,NC    OVERFLOW? : OVERFLOW,OV         !OVERFLOW? : NOT OVERFLOW,NV    SIGN?     : NEGATIVE,NG         !SIGN?     : PLUS,PL    PARITY?   : PARITY EVEN,PE      !PARITY?   : PARITY ODD,POExamples:    .IF AX == 1               .REPEAT    .IF ZERO?                 .UNTIL ZERO?    .IF !(AX & 0Fh)    .IF AL=ESC || AL=CR    看到这些指令了吗? 是不是似曾相识,期待以久了。MASM 6.x 新增指令列表_#2 :  这些指令都是小弟从书上及MASM 6.0 之范例程式中翻出来的,若有遗落疏失,请包涵。程式指令:    .STARTUP       : 程式开始,校准DS节区,    .EXIT [result] : 程式结束,返回DOS, result 可指定ERRORLEVEL值引申:    .STARTUP : mov dx,@data               mov ds,dx                  .                  .       .EXIT    : mov ah,4ch               int 21h    .EXIT 1  : mov ax,4c01h               int 21h判断:    .IF <expression>         .    .ELSEIF <expression1>         .    .ELSE         .    .ENDIF.ELSEIF 及.ELSE 为非必要之动作,写过高级语言的应该不难了解才对!MASM 6.x 新增指令列表_#3 : 这些指令都是小弟从书上及MASM 6.0 之范例程式中翻出来的,若有遗落疏失,请包涵。循环指令:    (1) 前测:        .WHILE <expression>              .              .        .ENDW        当条件成立,即执行循环内,否则执行循环後之动作    (2) 後测:    1.  .REPEAT              .              .        .UNTIL <expression>      or    2.  .REPEAT              .              .        .UNTILCXZ <expression>     1. 循环一直到条件成立即停止循环     2. 同1 ,但加上判断CX是否为0 (OR的关系,即条件为真或CX==0)辅助指令:    .BREAK <expression>    .COUNTINE <expression>    配合上述循环指令运用    .BREAK    可中止循环    .COUNTINE 可跳至循环开头    可在其後加上叙述,叙述成立才动作嗯! 愈看愈像PASCAL了Examples:    .WHILE AX==1 || !ZERO?     .REPEAT            .                         .    .ENDW                      .UNTIL (AX & 1)    .REPEAT            .      .BREAK .IF ZERO?            .      .COUNTINE            .    .UNTILCXZ (DX == 0)引申:    上述之判断及循环,其实就是CMP XX,YY                                Jxx xxxx,LOOPxx xxxx                                之组合。    其内动作复杂,小弟写不出来 :~~( 请写过MASM 5.x的人自行    体会那种复杂的古老方式。MASM 6.x 新增指令列表_#4 : 这些指令都是小弟从书上及MASM 6.0 之范例程式中翻出来的,若有遗落疏失,请包涵。副程式模组指令:PROTO  : 副程式宣告,类似QB之DECLARE (可置於内含档,或程式开头任何一处)INVOKE : 副程式呼叫,类似ASM 之CALL,但可传递参数         以下之叙述多以QB为对象,因为小弟酷爱QB.完整语法:<Subname> PROTO <language type> [exp1:....,][exp2:....]  < >:必需加上之叙述  [ ]:视其需要之叙述,可有可无  Subname : 副程式名称  language type : 连结之语言, 如PASCAL,BASIC,C  exp1:....,exp2:.... :传递之参数及其型态, 型态叙述若加上PTR 则为传址  语言: PASCAL=BASIC,汇编连结组合用PASCAL或BASIC 较顺手  传值或传址:  X:byte,Y:ptr byte               则X 为传值,占1 byte,Y 为传址,占2 byte (因位址占2 byte)  注!:叙述间之分隔符号要搞清楚是「空格」或「逗号」。      语言中之「BASIC 」为编译式BASIC ,如QuickBASIC 4.X, BASIC Compiler 7.XINVOKE <subname>,[exp1,exp2,...]  subname : 副程式名称  exp1,exp2,.. : 参数宣告范例:    (1) 主程式宣告      .MODEL SMALL        Subname PROTO BASIC X:BYTE,Y:BYTE,Result:PTR WORD      .DATA           SX db 1           SY db 2           ec dw 0      .CODE           INVOKE Subname,SX,SY,ec      .STACK      END    (2) 副程式宣告       .MODEL SMALL,BASIC 此语言叙述可有可无,影向副程式之参数传递,若                          副程式中已宣告其语言,则此可免写。         Subname PROTO X:BYTE,Y:BYTE,Result:PTR WORD           此叙述在主、副程式中,都应加上确保组译无误       .CODE         Subname PROC BASIC USES bx dx si ,   此处叙述之陈述重要,各叙述                      X:BYTE ,                之分隔符号尤应写好。                      Y:BYTE ,                BASIC:连结之语言                      Result:PTR WORD         USES :会被改变原值的暂存器                                                    通知ASM 将其原值保存                    .                    .                 ret      ASM 会自动加上欲清除之堆叠数         Subname ENDP       END引申:    PROTO 类似EXTRN 但较其叙述更完善    INVOKE与CALL之差别,INVOKE可加上参数传递,而CALL则需自己动手。    例: INVOKE Subname,X,Y         组译为: MOV AX,X  ;此处叙述不定,视参数型态                 PUSH AX                 MOV AX,Y                 PUSH AX                 CALL Subname         其中INVOKE会帮使用者做好参数堆入堆叠之动作    PROC: 加上语言叙述,会以该语言之参数传递方式,为使用者完成参数取得          加上USES叙述,会替使用者将指定之暂存器堆入堆叠    例: Subname PROC BASIC USES bx dx,                     X:BYTE,                     Y:BYTE                    .                    .                ret        Subname ENDP        组译为:                 PUSH BP     ┐ 有参数之传递,故做校准BP之动作                 MOV BP,SP   ┘                 PUSH BX     ┐ 使用者指定保存之暂存器之堆入                 PUSH DX     ┘                 MOV X,[BP+6] 因有basic 叙述,故采basic 之参数传递方式,                 MOV Y,[BP+4] 第一个参数在堆叠下方,第二个在上面                 .            详见「QuickBASIC专题实作-第叁波」                 .            或BASIC 使用手册                 .                 .                 POP DX      ┐ 使用者指定保存之暂存器取回                 POP BX      ┘ 堆入及取回动作,组译时皆替使用者完成                 POP BP                 RET 2       2 为组译时加上,因为有两个byte的参数传递。请不要怀疑引申部分之正确与否,其中之内容都是我汇编连结後,用DEBUG 去看出来的,保证正确,若用CODEVIEW则更容易了解。关於程式模组方面,尚提供了一些更方便的.COM档写法及一些叙述,但小弟因功力不够,所以看不太懂,有兴趣知道的,可自行从MASM 6.x的范例中挖宝。此外,MASM 6.x尚提供了一些公用程式,其中6.0 for DOS&OS/2, 6.1 for DOS&WIN不过其中的PWB IDE 环境跟中文不太相容,CODEVIEW若非双萤幕,则难展威力,其他的公用程式如LIB 跟LINK跟以前的差不多,其他的小弟不知道用途 :_(  。欲使用MASM 6.x者,需最少须具备ML.EXE,ML.ERR及LINK.EXE						 Glow Glove 制 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -