16位汇编

Logic Instructions

  • AND DST, SRC ; (DST)<--(DST) & (SRC)

  • OR DST, SRC ; (DST)<--(DST) | (SRC)

  • XOR DST, SRC ; (DST)<--(DST) xor (SRC)

    这三条指令有几个常用的功能,原理是基于数字0~9与其ASK码相差30H

    • Convert one ASCII code to integer
      SUB AL, 30h
      AND AL, 0Fh

    • Convert one digit integer to ASCII
      OR BL, 30h

    • Change the case of ASCII code
      XOR CL , 00100000b

    • TEST OPR1, OPR2 ; (OPR1)&(OPR2)
      与and功能一样,不同的是test并不改变目标操作数
      上述4条指令对FLAG寄存器的影响
      CF OF 设为0 PF SF ZF看结果

    • NOT DST
      取反操作

    • OP DST, CNT; OP is SHL, SAL, SHR, SAR 移位指令

      • SHL/SAL 逻辑/算数左移 产生的效果是一样的 都是 左边被移除的数字进入CF中 右边补0
      • SHR Logically shift right 逻辑右移 最低进入 CF 最高位补0
      • SAR Arithmetically shift right 算数左移
    • Rotate Instructions
      OP DST, CNT; OP is ROL, RCL, ROR, RCR

      • ROL 向左循环移动 cnt次
      • RCL 连同CF位向左循环
      • ROR 向右循环
      • RCR 连同CF位向右循环

      Example
      Convert ASCII string ‘96’ to packed BCD 96H

      MOV AL, ASC ; AL<--39H (‘9’)
      MOV CL, 4
      SHL AL, CL ;39H->90H
      MOV BL, AL ;BL<--90H
      MOV AL, ASC+1 ;AL<--36H (‘6’)
      AND AL, 0FH ;AL<--06H
      OR BL, AL ;BL<--96H
      MOV BCD, BL

Jump Instructions

  • Short Jump

    JMP SHORT OPR
    (E)IP=(E)IP+8-bit displacement

  • Near Jump

    JMP OPR ;当前段内跳转
    (E)IP=(E)IP+16-bit displacement

  • Far Jump

    JMP FAR PTR OPR

  • Jumps with Register Operands

    JMP reg16/32

  • Indirect Jumps Using an index

    JMP WORD PTR OPR ; NEAR JUMP
    JMP DWORD PTR OPR ; FAR JUMP
    * New address is
    * NEAR JUMP
    IP = (OPR)
    * FAR JUMP
    (E)IP<--((DS)16+OPR)
    CS<--((DS)
    16+OPR+2/4)

  • Conditional Jump

    Jcc disp8
    * if (cc) is TRUE THEN
    (E)IP =(E)IP+8-bit displacement
    * else
    continue to execute the next instruction

```
Conditional Jump (Jcc)
    Assembly    Operation       Tested Condition                        判断条件
    JC          Jump            if Carry CF=1 
    JNC         Jump            if no Carry CF=0 
    JZ/JE       Jump            if equal or Zero ZF=1 
    JNZ/JNE     Jump            if no equal or no Zero ZF=0 
    JS          Jump            if sign (negative) SF=1 
    JNS         Jump            if no sign (positive) SF=0 
    JO          Jump            if overflow OF=1 
    JNO         Jump            if no overflow OF=0 
    JP/JPE      Jump            if parity even PF=1 
    JNP/JPO     Jump            if parity odd PF=0 
    JCXZ        Jump            if CX is Zoro CX=0 
    JECXZ       Jump            if ECX is Zero ECX=0
    JA JNBE                     ZF=0 and CF=0                           A>B Unsigned number
    JB JNAE                     ZF=0,CF=1                               A<B Unsigned number
    JAE JNB                     ZF=1 or CF=0                            A>=B Unsigned number
    JBE JNA                     ZF=1 or CF=1                            A<=B Unsigned number
    
    JG JNLE                     SF=OF and ZF=0                          A>B Signed number
    JL JNGE                     SF<>OF and ZF=0                         A<B Signed number
    JGE JNL                     SF=OF or ZF=1                           A>=B Signed number
    JLE JNG                     SF<>OF或ZF=1                            A<=B Signed number
```
  • Branch Structure Programming
    举例:
    There is a WORD array named ARRAY which has N elements, please examine the array, then put the number of positive in DI register, the number of 0 in SI register, and the number of negative in AX register

    
    
    
  • Machine Control Instructions
    CLC —— clear carry flag; CF=0
    CMC —— complement carry flag; CF=~CF
    STC —— set carry flag; CF=1
    CLD —— clear direction flag; DF=0
    STD —— set direction flag; DF=1
    CLI —— clear interrupt flag; IF=0
    STI —— set interrupt flag; IF=13

Loop Instructions

LOOP LABEL ; LOOP
LOOPZ/LOOPE LABEL ; Condition LOOP 配合CMP语句可以判断相等
LOOPNZ/LOOPNE LABEL ; Condition LOOP

这一部分的关键在于使用CMP 和JCC的组合...之后会写几个程序练练手

String Instructions

对于所有的串操作:SI里一般村原串地址,DI存目标串地址(段地址DS,ES同理)
并且SI,DI里面的值会自动改变,改变的方式依赖于DF位的设立,如果DF=0则为"正方向"每次自增1个单位,DF=1时为"反方向",每次操作递减1个单位(一个单位具体代表多少看具体的命令,就用LODS指令来说,LODSB 一个单位=1,LODSW =2 LODSD=4

  • LODS指令读取原串.将SI指向的串存入AX中

  • STOS指令存目标串,将AX中的串存入DI指向的串,经常与REP一起使用

  • MOVS 将DS:SI中的内容复制到ES:DI,经常与REP一起使用

  • INS outs 从IO设备中存取字符串

  • SCAS 比较ds:di中的数据与AX中的数据

    ;查找String中的'a'字符
    CLD
    LEA EDI, String
    MOV AL, ‘a’
    MOV ECX, 11
    REPNZ SCASB
    JZ FOUND

  • CMPS 比较DI与SI中的数据

    ;Compare SOURCE and DESTIN, if not same, load the first char in SOURCE that not match into AL register
    

LEA SI, SOURCE
LEA DI, DESTIN
CLD
MOV CX,100
REPZ CMPSB
JCXZ MATCH
DEC SI ; When terminal the loop, (E)SI and
; (E)DI point to the next position
LODSB
...
MATCH:
```

程序指令

简单来说就是利用CALL指令和RET指令来完成函数调用
用寄存器或者堆栈来传参

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容

  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 37,177评论 8 114
  • 计算机通过执行指令序列来使机器得以工作,所以对于每一系列的计算机都有指定的一组指令集供计算机使用,这组指令...
    未来科技工作室阅读 7,988评论 1 10
  • 指令是使计算机执行某种特定操作的二进制编码。8086 CPU指令系统有133条指令,通常分为数据寻址方式和程序寻址...
    刀月水阅读 1,630评论 0 1
  • 汇编: 汇编即是机器指令助记符,机器指令让cpu工作。像是mov、jmp、jcxz等汇编指令都有对应的机器指令。有...
    飞速遗忘阅读 398评论 0 1
  • 十月我离开眼下的秋天 最后看了你一遍 没有再见,转身怕是永远 同行的路上 我们共度的风景,请珍藏 天空下,你湛蓝目...
    乌鸦之白阅读 396评论 8 6