abcd12321
March 3rd, 2005, 12:08 AM
the following code was meant to do a memory to memory transfer of 11 bytes from the data segment offset 00h to the data segment offset 20h .i had expected the string "hello world" to be in the datasegment offset 20h.plz tell me where the code went wrong and how to correct it.
thanks a lot.
.MODEL SMALL
.STACK 64
.386
.DATA
ORG 00
SOURCE DB 'HELLO WORLD'
ORG 20
DESTINATION DB 11 DUP(?)
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
mov al,00000001b ;DISABLE DMA 1
out 08h,al
MOV AL,00b ;CLEAR BYTE POINTER
OUT 0CH,AL
MOV AX,ds:00 ;CHANEL 0 BASE ADDRESS
OUT 00H,AL
MOV AL,AH
OUT 00H,AL
MOV AL,0FH ;DMA PAGE 0
OUT 87H,AL
NOP
OUT 87H,AL
MOV AX,ds:20 ;CHANEL 1 BASE ADDRESS
OUT 02H,AL
MOV AL,AH
OUT 02H,AL
MOV AL,00H ;DMA PAGE 1
OUT 83H,AL
MOV AL,11 ;CHANEL 1 BASE COUNT
OUT 02H,AL
mov al,00010001b ;ENABLE DMA
OUT 08H,AL
MOV AL,0000000100b ;REQUEST REGISTER
OUT 09H,AL
WAIT1: IN AL,8H ;READ STATUS REGISTER
AND AL,00000010b
CMP AL,0
JNZ WAIT1 ;WAIT UNTIL TERMINAL COUNT REACHED
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN
thanks a lot.
.MODEL SMALL
.STACK 64
.386
.DATA
ORG 00
SOURCE DB 'HELLO WORLD'
ORG 20
DESTINATION DB 11 DUP(?)
.CODE
MAIN PROC FAR
MOV AX,@DATA
MOV DS,AX
mov al,00000001b ;DISABLE DMA 1
out 08h,al
MOV AL,00b ;CLEAR BYTE POINTER
OUT 0CH,AL
MOV AX,ds:00 ;CHANEL 0 BASE ADDRESS
OUT 00H,AL
MOV AL,AH
OUT 00H,AL
MOV AL,0FH ;DMA PAGE 0
OUT 87H,AL
NOP
OUT 87H,AL
MOV AX,ds:20 ;CHANEL 1 BASE ADDRESS
OUT 02H,AL
MOV AL,AH
OUT 02H,AL
MOV AL,00H ;DMA PAGE 1
OUT 83H,AL
MOV AL,11 ;CHANEL 1 BASE COUNT
OUT 02H,AL
mov al,00010001b ;ENABLE DMA
OUT 08H,AL
MOV AL,0000000100b ;REQUEST REGISTER
OUT 09H,AL
WAIT1: IN AL,8H ;READ STATUS REGISTER
AND AL,00000010b
CMP AL,0
JNZ WAIT1 ;WAIT UNTIL TERMINAL COUNT REACHED
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN