我必須在文件('text.txt')中寫入's'中的所有數字,但從結尾到第一個數字(87654321)。
我的問題是:mov si,len
= 8,dec si
= 7以及爲什麼mov dl,byte ptr s+si-1
是正確的? s+si-1
是6(0 + 7-1),這意味着數字5從's'(在little-endien中)。如何從's'中得到8?在程序集中計數
assume cs:code, ds:data
data segment
fileName db 'text.txt',0
s dw '12','34','56','78'
len equ $-s
s2 db len dup(?)
fileHandle dw ?
openErrorMsg db 'File can not be opened','$'
writeErrorMsg db 'An error occured when writing','$'
data ends
code segment
start:
mov ax,data
mov ds,ax
;open the file
openFile:
mov ah,3dh
mov al,1
mov dx,offset fileName
int 21h
jc openError
mov fileHandle,ax
mov cx,len
mov si,len
dec si
mov di,0
jcxz final
;make the new array
formare:
mov dl,byte ptr s+si-1 ;HERE
mov s2[di],dl
inc di
mov dl,byte ptr s+si
mov s2[di],dl
inc di
sub si,2
dec cx
loop formare
;write into the file
writeToFile:
mov al,0h
mov ah,40h
mov bx,fileHandle
mov cx,len
mov dx,offset s2
int 21h
jc writeError
jmp final
openError:
mov ah,09h
mov dx,offset openErrorMsg
int 21h
writeError:
mov ah,09h
mov dx,offset writeErrorMsg
int 21h
final:
mov ax, 4c00h
int 21h
code ends
end start
索引從零開始。 – Jester
也許我只是很累,但我發現你的實際問題很難理解。 –