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

Тема в разделе "Другие", создана пользователем NEt_hunter, 23 дек 2006.

Статус темы:
Закрыта.
  1. NEt_hunter

    NEt_hunter Гость

    Приветствую всех!
    Даны 3 константы с фиксированной точкой в формате слова. Написать на Ассемблере программу печати двоичного представления этих констант и записать результат в файл. Первая часть задания работает, вот она:
    Код (Text):
    .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
    Нужно немножно доделать, а именно осуществить запись в файл.
    Вот попробовал так:

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

    Код (Text):
    .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

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

Поделиться этой страницей