汇编之前有次布置的课后作业,动手敲了下代码,现在记录一下。
题目
- 3.5
已知数据段有:
FIRST DB 12H, 34H
SECOND DB 56H, 78H
(1)要求采用传送指令编写一段程序,实现 FIRST
和 SECOND
单元的内容互换, FIRST + 1
单元和 SECOND + 1
单元的内容互换。
(2)设 (SS) = 2000H,(SP) = 3456H,用堆栈指令编写一段程序完成上述要求,并画出堆栈的数据变化示意图。
代码
(1)
DATAS SEGMENT
FIRST DB 12H,34H
SECOND DB 56H,78H
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV AL,FIRST
MOV BL,SECOND
MOV FIRST,BL
MOV SECOND,AL
MOV AL,FIRST+1
MOV BL,SECOND+1
MOV FIRST+1,BL
MOV SECOND+1,AL
MOV AH,4CH
INT 21H
CODES ENDS
END START
事实上,第一小问的核心代码可以再简化一点。三行就能搞定内容互换。
MOV AX,WORD PTR FIRST
XCHG WORD PTR SECOND,AX
MOV WORD PTR FIRST,AX
(2)
DATAS SEGMENT
FIRST DB 12H,34H
SECOND DB 56H,78H
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
;MOV AL,FIRST
;MOV AH,FIRST+1
;MOV BL,SECOND
;MOV BH,SECOND+1
;PUSH AX
;PUSH BX
PUSH WORD PTR FIRST
PUSH WORD PTR SECOND
POP WORD PTR FIRST
POP WORD PTR SECOND
MOV AH,4CH
INT 21H
CODES ENDS
END START
具体调试可以参考一下我的这篇博客。