📌  相关文章
📜  8086程序,用于搜索字符串的数字

📅  最后修改于: 2021-06-29 12:02:45             🧑  作者: Mango

问题–在8086微处理器中编写汇编语言程序,以5字节的字符串搜索数字,将偏移量存储在找到元素的位置以及用于查找该数字的迭代次数。

例子 –

算法 –

  1. 在AX中移动2000并将其分配给ES
  2. 将值600分配给DI
  3. 在AL中移动25
  4. 在CX中移动0005
  5. 将CX的内容移至BX
  6. 清除方向标记(DF)的值
  7. 重复步骤7,直到未设置零标志(ZF)
  8. 从[DI]扫描字节,并检查其与AL内容的差异。更新DI的值
  9. 将DI的值减1
  10. 用CX减去BX的值
  11. 将BX的值减1
  12. 暂停程序

程序 –

OFFSET MNEMONICS COMMENT
400 MOV AX, 2000 AX <- 2000
403 MOV ES, AX ES <- AX
405 MOV DI, 600 DI <- 600 408 MOV AL, 25 AL = 25 40A MOV CX, 0005 CX = 0005 40D MOV BX, CX BX <- CX 40F CLD DF = 0 so that memory is accessed
from lower byte to higher byte
410 REPNE SCAS B Repeat till ZF = 0. Scan value from [DI] and
compare with AL, Increment DI
414 DEC DI DI = DI – 1 415 MOV DX, DI DX = DI 417 SUB BX, CX BX = BX – CX 419 DEC BX BX = BX – 1 41B HLT Stop

解释 –

  1. MOV AX,2000用于将数据移动到寄存器AX。
  2. MOV ES,AX用于将AX的数据移动到段寄存器ES。
  3. MOV DI,600用于将偏移量600移动到目标索引(DI)。
  4. MOV AX,25用于将数据移动到AL。
  5. MOV CX,0005用于将数据移动到CX。
  6. MOV BX,CX用于将CX的内容复制到BX。
  7. CLD用于清除方向标志(DF)的值,以便从低字节到高字节访问存储器。
  8. REPNE SCAS B用于扫描DI的数据并将其与AL的数据进行比较,如果相等,则转到下一步,否则将DI的值加1并重复此步骤。
  9. DEC DI用于将DI的内容减1。
  10. MOV DX,DI用于将DI的内容移动到DX。
  11. SUB BX,CX用于通过CX减去BX的内容。
  12. DEC BX用于将BX的内容减1。
  13. HLT停止执行程序,并停止任何进一步的执行。