汇编之前有次布置的课后作业,动手敲了下代码,现在记录一下。

题目

  • 3.5

已知数据段有:

FIRST  DB 12H, 34H
SECOND DB 56H, 78H

(1)要求采用传送指令编写一段程序,实现 FIRSTSECOND 单元的内容互换, 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

具体调试可以参考一下我的这篇博客