Блог программистов



F.A.Q.Pblog

1й год Форума программистов 2006-2007

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

Даны 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 viv odimoy 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 konstant i 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
Файл создается, но пишет туда пару символов, а не все.
Это минутное дело для вас, уважаемые ассемблерщики. Помогите, очень нужно.


Просмотр ответов:
http://programmersforum.ru/showthread.php?t=1040


Другие вопросы:

Определение типа микропроцессора (TASM)
Программа на Ассемблере, запись в файл.
Как взять модуль числа



<<<Назад