汇编8086程序

标签 assembly x86-16

我是汇编语言新手,这是一些我不理解的代码,希望有人能帮忙。

DATA SEGMENT
     VALUES DB 1,2,3,4,5,6,7,8,9
     ITEM DB 6
DATA ENDS
CODE SEGMENT
     ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
       MOV DX,AX
       LEA SI,VALUES
       MOV AL,ITEM
COMPARE: CMP AL,[SI]
         JZ Found
         INC SI
         LOOP COMPARE
         CLC
         JMP EXIT
Found: STC
EXIT: MOV AH,4CH
      INT 21H
      ENDS
CODE END

这个程序应该寻找号码 (6)其中1,2,3,4,5,6,7,8,9

我了解它的一般工作原理,但我有几个问题:

  1. 我们为什么使用CLCSTC ??我知道他们把 CF分为零和一,但我们为什么要使用它?
  2. 我们为什么使用MOV AH,4CHEXIT之后标签??
  3. 在开始标签之后,为什么我们要以下内容:

    MOV AX,数据
    MOV DX,AX

为什么我们不直接: MOV DX,DATA

最后,有人可以推荐一本学习汇编的好书吗?

最佳答案

MOV AX,DATA

MOV DX,AX

这是错误的。

正确答案是:

MOV AX,DATA   

MOV DS,AX

我们不能直接将数据从内存发送到段寄存器(DS)。所以我们通过通用寄存器(AX)发送。

关于汇编8086程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5367498/

相关文章:

assembly - 从引导加载程序运行时 STOSB 指令不存储字节

assembly - 从启动开始跟踪指令执行

assembly - 如果我在程序中使用 fsin 来查找值的 sin,我会发现表达式语法错误

assembly - 尝试使用 x86 程序集查找数组中的最小值时出现意外输出

c - 动态生成的代码在错误的地址执行

c - AVR GCC、汇编 C stub 函数、eor 和所需的常量值

audio - 使用 IBM-PC 扬声器播放音乐

c - 'C' 显示为 2 个不同的值?

gcc - 为什么 gcc 会生成没有标志 -fno-pie 的奇怪代码?

汇编语言: counter loop