问题–在8086微处理器中编写汇编语言程序, 以将8位BCD编号转换为其相应的ACSII代码。
假设–
程序的起始地址:400
输入存储器位置:2000
输出存储位置:3000
范例:
Input:
DATA: 98H in memory location 2000
Output:
DATA: 38H in memory location 3000 and
39H in memory location 3001
算法–
- 将内存位置2000的内容加载到寄存器AL中
- 将寄存器AL中的内容复制到寄存器AH中
- 用0F在寄存器AL上执行AND操作
- 将04分配给CL寄存器
- 通过使用CL执行SHR指令来移位AH的内容
- 用3030在寄存器AX上执行OR操作
- 将AX的内容存储在内存位置3000中
程序–
内存地址 | 助记符 | 注释 |
---|---|---|
400 | MOV AL, [2000H] | AL <-[2000] |
404 | MO AH, AL | AH <-AL |
406 | AND AL, 0F | AL <-(AL AND 0F) |
408 | MOV CL, 04 | CL <-04 |
40A | SHR AH, CL | 将AH内容右移4位(CL值) |
40C | OR AX, 3030H | AX <-(AX OR 3030) |
40F | MOV [3000], AX | [3000] <-AX |
413 | HLT | 停止执行 |
说明–
- MOV AL, [2000]:在AL中加载内存位置2000的内容
- MOH AH, AL:在AH中复制AL的内容
- AND AL, 0F:用0F在AL上执行AND操作
- MOV CL, 04将04分配给CL寄存器
- SHR AH, CL:将AH寄存器的内容右移4位, 即CL寄存器的值
- OR AX, 3030:用3030在AX上执行OR操作
- MOV [3000], AX:将AX寄存器对的内容存储在3000个存储地址中
- HLT:停止执行程序