📜  8086程序将8位BCD编号转换为十六进制编号

📅  最后修改于: 2021-06-28 17:15:56             🧑  作者: Mango

问题–在8086微处理器中编写汇编语言程序,以将8位BCD编号转换为十六进制编号。

例子 –

假设 –
段寄存器的初始值为00000。
物理内存地址的计算:
内存地址=段寄存器* 10(H)+偏移
其中段寄存器为00000(假设),并且在程序中给出了偏移量。

算法 –

  1. 在SI中分配值500,在DI中分配值600。
  2. 在BL中移动[SI]的内容。
  3. 使用AND指令计算0F和BL内容之间的AND。
  4. 在AL中移动[SI]的内容。
  5. 使用AND指令计算F0和AL内容之间的AND。
  6. 在CL中移动04。
  7. 在AL上使用ROR指令。
  8. 在DL中移动0A。
  9. 使用MUL指令将AL与DL相乘。
  10. 使用ADD指令将AL与BL相加。
  11. 在[DI]中移动AL的内容。
  12. 停止程序。

程序 –

MEMORY ADDRESS MNEMONICS COMMENT
0400 MOV SI, 500 SI <- 500
0403 MOV DI, 600 DI <- 600
0406 MOV BL, [SI] BL <- [SI]
0408 AND BL, 0F BL = BL AND 0F
040A MOV AL, [SI] AL <- [SI]
040C AND AL, F0 BL = AL AND F0
040E MOV CL, 04 CL = 04
0410 ROR AL, CL Rotate AL
0412 MOV DL, 0A DL = 0A
0414 MUL DL AX = AL * DL
0416 ADD AL, BL AL = AL + BL
0418 MOV [DI], AL [DI] <- AL
041A HLT End of Program

说明–使用的寄存器SI,DI,AL,BL,CL,DL。

  1. MOV SI,500用于将偏移量500移动到起始索引(SI)
  2. MOV DI,600用于将偏移量600移动到目标索引(DI)
  3. MOV BL,[SI]用于将[SI]的内容移至BL
  4. AND BL,0F用于掩盖BL的高阶半字节
  5. MOV AL,[SI]用于将[SI]的内容移至AL
  6. AND AL,F0用于掩盖BL的低阶半字节
  7. MOV CL,04用于将04移至CL
  8. ROR AL,CL用于取反AL的内容
  9. MOV DL,0A用于将0A移至DL
  10. MUL DL用于将AL的内容与DL相乘
  11. 添加AL,BL用于添加AL和BL的内容
  12. MOV [DI],AL用于将AL的内容移至[DI]
  13. HLT停止执行程序,并停止任何进一步的执行