问题–在8086微处理器中编写汇编语言程序,以将8位BCD编号转换为十六进制编号。
例子 –
假设 –
段寄存器的初始值为00000。
物理内存地址的计算:
内存地址=段寄存器* 10(H)+偏移
其中段寄存器为00000(假设),并且在程序中给出了偏移量。
算法 –
- 在SI中分配值500,在DI中分配值600。
- 在BL中移动[SI]的内容。
- 使用AND指令计算0F和BL内容之间的AND。
- 在AL中移动[SI]的内容。
- 使用AND指令计算F0和AL内容之间的AND。
- 在CL中移动04。
- 在AL上使用ROR指令。
- 在DL中移动0A。
- 使用MUL指令将AL与DL相乘。
- 使用ADD指令将AL与BL相加。
- 在[DI]中移动AL的内容。
- 停止程序。
程序 –
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。
- MOV SI,500用于将偏移量500移动到起始索引(SI)
- MOV DI,600用于将偏移量600移动到目标索引(DI)
- MOV BL,[SI]用于将[SI]的内容移至BL
- AND BL,0F用于掩盖BL的高阶半字节
- MOV AL,[SI]用于将[SI]的内容移至AL
- AND AL,F0用于掩盖BL的低阶半字节
- MOV CL,04用于将04移至CL
- ROR AL,CL用于取反AL的内容
- MOV DL,0A用于将0A移至DL
- MUL DL用于将AL的内容与DL相乘
- 添加AL,BL用于添加AL和BL的内容
- MOV [DI],AL用于将AL的内容移至[DI]
- HLT停止执行程序,并停止任何进一步的执行