使用函数技术编写汇编代码

时间:2019-02-26 14:20:50

标签: assembly x86 emu8086

我遇到一个问题,我必须将一个8位数字从存储位置ABCDH:1200H移到存储位置DCBAH:3456H。以下是我的代码:

   MOV [1200H], 6 
   MOV AL,[1200H]
    CALL FUNC
   HLT
   FUNC:

    MOV [3456H],AL
    RET

对吗?

1 个答案:

答案 0 :(得分:2)

  

将8位数字从内存位置 ABCDH :1200H移到内存位置 DCBAH :3456H。

鉴于源和目标位于不同的内存段中,您当前的解决方案会将AL值移动到检索到的同一段中的位置。我们希望这是段ABCDh开头!

mov ax, 0ABCDh
mov ds, ax
mov [1200h], 6       ;Initialize the source byte

mov al, [1200h]      ;Read source ABCDh:1200h
CALL FUNC
HLT

如果要在函数中进行此传输,则至少应保留(将要使用的)段寄存器。

; Input   AL
; Output  none
; Changes none
FUNC:
  push ds
  push dx
  mov  dx, 0DCBAh
  mov  ds, dx
  mov  [3456h], al  ;Write destination DCBAh:3456h
  pop  dx
  pop  ds
  ret