Прога готова, но нужно дописать запись в файл на Ассемблере.

  • Автор темы NEt_hunter
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

NEt_hunter

#1
Приветствую всех!
Даны 3 константы с фиксированной точкой в формате слова. Написать на Ассемблере программу печати двоичного представления этих констант и записать результат в файл. Первая часть задания работает, вот она:
Код:
.model SMALL
.STACK 100h
.DATA
const1 dw 15;pervaya konstanta
const2 dw -256;vtoraya
const3 dw 65280;tretya
prigl db 'Constants in computer memory:','$' 
ctrl db 0Dh,0Ah,'$';Enter, toyest perexod na nachalo tekushey stroki i perexod kursora na odnu poziciyu vniz
con1 db ' 6375 - ','$';Poyasneniye k pervoy konstante
con2 db ' 256 - ','$';... ko vtoroy
con3 db '65280 - ','$';... k tretyey
.CODE
start:
push @DATA
pop DS
mov ah,09h 
mov dx,offset prigl;Vivesti priqlasheniye
int 21h 
mov ah,09h
mov dx,offset con1;Vivesti poyasneniye 1 konstanti
int 21h 
mov ah,02h;Funkciya vivoda simvola
mov bx,const1;Kod 1-oy vivodimoy konstanti
mov cx,10h;Schetchik cikla = 16 , t.e. 16 bit kajdoy konstanti
mov di,3;Schetchik dlya 3-x konstant
jmp posl
met1:
mov ah,09h
mov dx,offset con2;Vivesti poyasneniye 2 konstanti
int 21h
mov ah,02h 
mov bx,const2;Kod 2-oy vivodimoy konstanti
mov cx,10h
jmp posl
met2:
mov ah,09h
mov dx,offset con3;Vivesti poyasneniye 3 konstanti
int 21h
mov ah,02h
mov bx,const3;Kod 3-yy vivodimoy konstanti
mov cx,10h
posl:
mov dx,30h;v dx zanosim kod simvola 0
shl bx,1;sdviq soderjimoqo reqistra BX na 1 bit vlevo
adc dl,0;Slojeniye s uchetom flaqa CF, t.k skladivayem s nulem, to uchitivayetsa tut tolko flaq CF

int 21h
loop posl;Povtorayem 16 raz
mov ah,09h
mov dx,offset ctrl;Perevod stroki
int 21h 
dec di;Umenshayem schetchik
cmp di,2;Smotrim di=2?
je met1;Da-perexod dlya vivoda 2 konstanti
cmp di,1;di=2?
je met2;Da-perexod dlya vivoda 1 konstanti
MOV AX, 4C00h;Inache vixod
int 21h


end start
Нужно немножно доделать, а именно осуществить запись в файл.
Вот попробовал так:

;----------------------------------
Тут обозначил то, что добавил
;----------------------------------

Код:
.model SMALL
.STACK 100h
.DATA
const1 dw 15;pervaya konstanta
const2 dw -256;vtoraya
const3 dw 65280;tretya
prigl db 'Constants in computer memory:','$' 
ctrl db 0Dh,0Ah,'$';Enter, toyest perexod na nachalo tekushey stroki i perexod kursora na odnu poziciyu vniz
con1 db ' 6375 - ','$';Poyasneniye k pervoy konstante
con2 db ' 256 - ','$';... ko vtoroy
con3 db '65280 - ','$';... k tretyey
handle dw ?
bufer db 32h dup(?)
file DB '1.txt',0
mes DB 'Oshibka', 0Ah, 0Dh,'$'
.CODE
start:
push @DATA
pop DS
;---------------sozdaniye fayla
MOV ah, 3Ch
mov CX, 2
LEA dx, file
int 21h
JC error
MOV handle, ax
;---------------
mov ah,09h 
mov dx,offset prigl;Vivesti priqlasheniye
int 21h 
mov ah,09h
mov dx,offset con1;Vivesti poyasneniye 1 konstanti
int 21h 

mov bx,const1;Kod 1-oy vivodimoy konstanti
mov cx,10h;Schetchik cikla = 16 , t.e. 16 bit kajdoy konstanti
mov di,3;Schetchik dlya 3-x konstant
jmp posl
met1:
mov ah,09h
mov dx,offset con2;Vivesti poyasneniye 2 konstanti
int 21h

mov bx,const2;Kod 2-oy vivodimoy konstanti
mov cx,10h
jmp posl
met2:
mov ah,09h
mov dx,offset con3;Vivesti poyasneniye 3 konstanti
int 21h
mov bx,const3;Kod 3-yy vivodimoy konstanti
mov cx,10h
posl:
mov dx,30h;v dx zanosim kod simvola 0
shl bx,1;sdviq soderjimoqo reqistra BX na 1 bit vlevo
adc dl,0;Slojeniye s uchetom flaqa CF, t.k skladivayem s nulem, to uchitivayetsa tut tolko flaq CF
int 21h
loop posl 
;-----------------zapis v fayl. VOT zdes nujno koe-chto ispravit
mov bx, handle
mov cx, 10h
mov ah, 40h
mov bufer[SI], dl
lea dx, bufer[SI]
int 21h
;------------------
mov ah,09h
mov dx,offset ctrl;Perevod stroki
int 21h 
dec di;Umenshayem schetchik
cmp di,2;Smotrim di=2?
je met1;Da-perexod dlya vivoda 2 konstanti
cmp di,1;di=1?
je met2;Da-perexod dlya vivoda 1 konstanti
JMP SHORT zak
int 21h
zak:
;-------------------Zakritiye fayla
MOV AH, 3Eh
MOV BX, handle
int 21h
JMP SHORT kones
;-------------------
error:
MOV AH,9
LEA DX, mes
int 21h
kones:
MOV AX, 4Ch
int 21h
end start

Файл создается, но пишет туда пару символов, а не все.
Это минутное дело для вас, уважаемые ассемблерщики. Помогите, очень нужно. Спс. всем за внимание!
 
Статус
Закрыто для дальнейших ответов.