【问题标题】:Two data segments and 386 code in assembly汇编中的两个数据段和 386 代码
【发布时间】:2014-03-26 13:55:46
【问题描述】:

我正在编写一个程序,它必须从屏幕上的不同数据段打印两个字符串。而且我必须为我的程序使用 32 位寻址模式。

.386
assume cs:codeSegment, ds:dataSeg1, es:dataSeg2, ss:stackSeg
; STACK SEGMENT DECLARATION
stackSeg segment  STACK 'stack'
    db 100h dup(?)
stackSeg ends

; DATA SEGMENTS DECLARATION
dataSeg1 segment  'data'
    s1 db 'First$'
    s1_size dd 6
dataSeg1 ends

dataSeg2 segment 'data'
    s2 db 'Second$'
    s2_size dd 7
dataSeg2 ends
; Code segment
codeSegment segment 'code'
start:
    mov ax, dataSeg1
    mov ds, ax
    mov ax, dataSeg2
    mov es, ax
    mov ah, 9

    mov edx, offset s1 ; need string from DS
    int 21h
    mov edx, offset s2 ; need string from ES
    int 21h


    mov ax, 4C00h
    int 21h


codeSegment ends
end start

我不明白,如何从正确的段传递字符串偏移量。谁能解释我做错了什么?

谢谢

【问题讨论】:

    标签: assembly x86 32-bit data-segment


    【解决方案1】:

    疯狂! push ds ; save seg1 push es ; get seg2 into ds pop ds ; print string2 pop ds ; get seg1 back 有一个 BIOS int 10h 功能 - 13h ??? lookitup - 也从 es:bp 打印一个字符串。这就是创建平面内存模型的原因!这些天他们教你的孩子什么???

    可能还需要更改您的 assume 指令...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2015-03-22
      • 1970-01-01
      • 2012-05-09
      • 2011-08-27
      • 2023-03-14
      • 1970-01-01
      相关资源
      最近更新 更多