Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2006, 12:50   #1
azze
Новичок
Джуниор
 
Регистрация: 23.12.2006
Сообщений: 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
Файл создается, но пишет туда пару символов, а не все.
Это минутное дело для вас, уважаемые ассемблерщики. Помогите, очень нужно.

Последний раз редактировалось azze; 23.12.2006 в 12:52.
azze вне форума Ответить с цитированием
Старый 24.12.2006, 13:03   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Код:
;-----------------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
;------------------
rpy3uH вне форума Ответить с цитированием
Старый 12.01.2008, 13:59   #3
XfighT
 
Регистрация: 12.01.2008
Сообщений: 3
По умолчанию

извиняюсь за АП темы...

у меня похожее задание... компилирую ету прогу и усли СХ до 40h то записывает в файл <1 0 0> если дальше увеличить то получаеться такое: <1 1.txt osibka>

помогите) как ето исправить?)))

вроде в файл оно пишет только последние разряды двоичного числа а не число целиком...

Последний раз редактировалось XfighT; 12.01.2008 в 15:53.
XfighT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прога на запись в Паскале. TakeR Помощь студентам 2 03.02.2009 12:17
Запись в файл Titan123 Общие вопросы Delphi 6 23.08.2008 01:12
Запись в файл С++ Viteks Общие вопросы C/C++ 3 18.04.2008 13:18
Запись в файл на С++ Mails Помощь студентам 7 31.03.2008 14:37
Прога на запись в Паскале TakeR Помощь студентам 5 27.12.2007 10:22