2014-03-26 7 views
0

글쎄, 화면에 다른 데이터 세그먼트의 두 문자열을 인쇄해야하는 프로그램을 작성하고 있습니다. 그리고 내 프로그램에 32 비트 addresing 모드를 사용해야합니다.두 개의 데이터 세그먼트와 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 지시어를 변경해야 할 수도 있습니다 ...