今天想和大家探讨一个问题,add和inc的区别有哪些?今天我也是因为一个汇编程序中遇到了。题目是在显示器的中央打印出'a'-'z',我使用的是add ah, 1,但是这样有一个问题,

那就是只打印出了一个a,然后循环完毕。当我把这句汇编修改成了inc ah的时候,它居然能够从‘a’-‘z'全部打印出来。代码如下:

1、

assume cs:code

stack segment
    db 128 dup (0)
stack ends
code segment
start:    mov bx, stack
    mov ss, bx
    mov sp, 128

mov bx, 0b800h
    mov es, bx
    mov ah, 'a'
s:    mov es:[160 * 12 + 40 *2], ah
    call replay
    cmp ah, 'z'
    ;inc ah
    add ah, 1;对标志位的影响
    jna s
    mov ax, 4c00h
    int 21h

replay:    push ax
    push dx
    mov ax, 0
    mov dx, 10
s1:    sub ax, 1
    sbb dx, 0
    cmp ax, 0
    jne s1
    cmp dx, 0
    jne s1
    pop dx
    pop ax
    ret

code ends
end start
上面的代码只能打印出'a'。

2、

assume cs:code

stack segment
    db 128 dup (0)
stack ends
code segment
start:    mov bx, stack
    mov ss, bx
    mov sp, 128

mov bx, 0b800h
    mov es, bx
    mov ah, 'a'
s:    mov es:[160 * 12 + 40 *2], ah
    call replay
    cmp ah, 'z'
    inc ah
    ;add ah, 1;对标志位的影响
    jna s
    mov ax, 4c00h
    int 21h

replay:    push ax
    push dx
    mov ax, 0
    mov dx, 10
s1:    sub ax, 1
    sbb dx, 0
    cmp ax, 0
    jne s1
    cmp dx, 0
    jne s1
    pop dx
    pop ax
    ret

code ends
end start
2号代码能够从’a‘-’z‘完整打印出来,我也查了很多资料说,add影响cf、sf、of等寄存器,inc只影响pf寄存器。在代码中显示之后就push了,并且在后面的操作完成之后也会pop,这样ah的最高位还是0才对。没有什么影响啊。但是为什么显示不出来呢?

汇编中add和inc的问题相关推荐

  1. 8086汇编中mov,add,sub语法

    8086汇编中mov,add,sub语法 mov,add,sub三个都是两个操作数 几个必要的元素 1.数据 2.寄存器(指定一般寄存器) 3.段寄存器 4.内存单元 mov指令 mov 寄存器,数据 ...

  2. 逆向知识十三讲,汇编中数组的表现形式,以及还原数组

    讲解数组之前,要了解数组的特性 1.数据具有连续性 2.数据类型相同 比如: int Ary[3] = {0,1,2}; 我们可以看出,上面定义的数组,数据是连续的,其中每个数据类型大小都是int类型 ...

  3. 无符号数、有符号数、补码在汇编中的运用及相关注意事项

    1.原码.反码.补码知识的复习: 三者的最高位均为符号位.我以前一直没弄明白的是为何8位补码的表示范围是-128~127,今天查阅了相关资料,于此记下. 仍然以8位为例: 原码的表示范围:-127~- ...

  4. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)

    From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...

  5. 汇编中寄存器加[]的意思

    一般说来,加方括号 [ ] 表示一种间接的取操作数方式,有点类似于C语言中的指针概念. 第一条指令 ADD AL ,[SI] 中,[SI] 表示寄存器间接寻址. 也就是说,与AL中内容相加的加数,不是 ...

  6. 逆向知识第七讲,三目运算符在汇编中的表现形式,以及编译器优化方式

    一丶编译器优化方式 首先说一下编译器优化方式. 1.常量折叠 2.常量传播 3.复写传播 4.公共表达式 5.去掉不可达到分支 6.顺序代替分支 7.数学变化 8.代码外提 9.减少变量. 10 强度 ...

  7. 汇编中浮点栈寄存器st0~st7浮点计算fld压栈再计算的过程运行原理

    目录 为什么浮点数不能用普通的数学指令计算 结论 用普通的数学计算add无法实现浮点数加法.必须使用浮点数计算指令fadd来进行浮点数加法计算. fpu的概念 浮点数计算需要先用fld指令压栈用fld ...

  8. ARMv8 A64 汇编中立即数范围问题分析

    问题描述 ARMv8 A64汇编中,立即数是如何表示的?不同的指令对于立即数的表示有差异吗? 在Stackoverflow上发现类似的讨论:https://stackoverflow.com/ques ...

  9. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)...

    From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...

  10. 汇编中参数的传递和堆栈修正

    在 Win32汇编中,我们经常要和 Api 打交道,另外也会常常使用自己编制的类似于 Api 的带参数的子程序,本文要讲述的是在子程序调用的过程中进行参数传递的概念和分析.一般在程序中,参数的传递是通 ...

最新文章

  1. SSM实现个人博客-day01
  2. 如何用Seaborn描绘线图,分面网格关联图,密度图,连接图,热力图,线性回归图,分面网格绘图
  3. 2008哲思自由软件峰会
  4. mac osx 下的 mysql_Mac OSX下的MySQL数据库升级
  5. Windows IP测试小脚本
  6. 【kafka】Kafka 之 Group 状态变化分析及 Rebalance 过程
  7. C语言和设计模式(之开篇)
  8. 为什么越有钱的人负债越多?
  9. ISP浅谈-Demosaic
  10. 用swich语句查看水果的价格
  11. 腾讯资深架构师干货总结:一文读懂大型分布式系统设计的方方面面
  12. 计算机数值方法知识,计算机数值方法.pdf
  13. 数组元素循环左移n个位置(JAVA)
  14. Yolo-v3算法改进-Poly-Yolo-v3
  15. 【玩转开源】Linux C 检测网口热插拔
  16. MyBatis框架学习笔记01:初生牛犊
  17. SQL研习录(24)——CHECK约束
  18. mp4格式怎么转换成gif格式?简单3步完成视频制作gif
  19. java游戏代码潜艇大战_java游戏之潜艇大战
  20. 赖霖枫:我要让身边的人资产超千万

热门文章

  1. uniapp公共跳转(uni.navigateTo)封装
  2. Linux线程-概念和控制
  3. 通过官网下载KITTI数据集失败解决方法
  4. Arduino测量误差数据的处理——莱特、格拉布斯准则剔除异常数据
  5. 测试方法——正交表法
  6. MongoDB 表设计
  7. Python常用模块库下载及安装
  8. 基于bim的施工管理平台
  9. java 映射类的方法_java什么是映射
  10. oracle里面的double,oracle建表语句double