问题–在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中
程序 –
Memory Address | Mnemonics | Comments |
---|---|---|
400 | MOV AL, [2000] | AL<-[2000] |
404 | MOV AH, AL | AH<-AL |
406 | AND AL, 0F | AL <- (AL AND 0F) |
408 | MOV CL, 04 | CL <- 04 |
40A | SHR AH, CL | Shift AH content Right by 4 bits(value of CL) |
40C | OR AX, 3030 | AX <- (AX OR 3030) |
40F | MOV [3000], AX | [3000]<-AX |
413 | HLT | Stop Execution |
解释 –
- MOV AL,[2000]:在AL中加载存储位置2000的内容
- MOV 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:停止执行程序