【问题标题】:Error in a string reversal program in emu8086emu8086 中的字符串反转程序出错
【发布时间】:2021-12-19 11:52:08
【问题描述】:

我尝试了一个字符串反转程序,但 emu8086 显示错误消息

(12)偏移量计算错误

LEA DI,STR2+LEN-1 行有什么问题?

DATA SEGMENT
STR1 DB 'HELLO'
LEN EQU $-STR1
STR2 DB 20 DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA SI,STR1
LEA DI,STR2+LEN-1
MOV CX,LEN
UP: CLD
LODSB
STD
STOSB
LOOP UP
MOV AH,4CH
INT 21H
CODE ENDS
END START

【问题讨论】:

    标签: string assembly offset x86-16 emu8086


    【解决方案1】:

    我没有使用 emu8086,但以下将更正您的第 12 行:

    mov di, offset STR2 + LEN - 1
    

    获取地址的更短的方法是写入mov si, offset STR1(使用3字节)而不是lea si, STR1(使用4字节)。


    循环以仍然设置的方向标志结束!
    在调用任何系统函数之前清除方向标志总是一个好主意:

    ...
    LOOP UP
    CLD            ; Add this to clear direction flag
    MOV AH,4CH     ; DOS.Terminate
    INT 21H
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      相关资源
      最近更新 更多