2014-03-26 24 views
0

那麼我正在編寫一個程序,它必須在屏幕上打印來自不同數據段的兩個字符串。我必須爲我的程序使用32位地址模式。彙編中的兩個數據段和386代碼

.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 

我不明白,如何從正確的段傳遞字符串偏移量。任何人都可以解釋我做錯了什麼?

謝謝

回答

0

瘋狂! 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指令...