Помощь - Поиск - Пользователи - Календарь
Полная версия: помогите написть четыре задания
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
Гость_Darkmax
sad.gif Пожалуйста помогите совсем атчаился не могу написать эту работу а от этого зависит практически вся моя дальнейшая жизнь, пора уже сдавать а у меня ни фига нет кроме неработающих обрывков программ. Не дается мне что то это язык низкого уровня
(ASSEMBLER 16 разрядный то-ест под DOS). Заранее благодарен.


1. Найти значение выражения.
Переменные - двузначные 16-ричные числа - вводятся пользователем с клавиатуры.
Ответ вывести на экран в 10-ой и 16-ой системах счисления. Предусмотреть случай, когда делитель равен нулю.
(a*8-b*2)/(d+2)

2. Работа с файлами, создание, чтение, запись в файл.
Общее задание: Написать программу по созданию текстового файла на основном диске.
Занести в него несколько произвольных строк.
1). Вывести на экран i-ую строку.
2). Заменить все символы «i» на символы «j» в k-ой строке.
3). Вывести на экран i-ое слово из j-ой строки.
4). Вывести i-ую строку в новый файл.
5). Нахождение файла на диске, удаление файла с диска, переименование файла

3. графика в текстовом режиме:
ввод и перемещение по экрану произвольного символа:
Сверху вниз или по диагонали из верхнего правого угла в левый нижний угол.

4. Графика в видеорежиме: создание простейшего изображения:
квадрат, цвет заливки и границы указы
xds
Первая задача:
.186
.model tiny

locals

.code
.startup
               mov dl,'a'
               call ReadIntHex
               push ax
               mov dl,'b'
               call ReadIntHex
               push ax
               mov dl,'d'
               call ReadIntHex

               add ax,2
               jz ErrDiv0
               xchg cx,ax         ;cx = d + 2
               pop ax             ;ax = -b * 2
               shl ax,1            
               neg ax
               pop dx
               shl dx,3           ;dx = a * 8
               add ax,dx          ;ax = a * 8 - b * 2
               cwd
               idiv cx            ;ax = (a * 8 - b * 2) / (d + 2)

               push ax
               call WriteIntDec
               call Writeln
               pop ax
               call WriteIntHex
               call Writeln

               mov ax,4C00h
               int 21h

ErrDiv0:
               mov ah,9
               lea dx,MsgDiv0
               int 21h
               mov ax,4C01h
               int 21h

WriteChar       proc
               push ax
               mov ah,2
               int 21h
               pop ax
               ret
WriteChar       endp

ReadDigit       proc
               mov ah,8
               int 21h
               mov dx,ax
               cmp Sign,0
               jne @@0
               inc Sign
               cmp al,'-'
               jne @@0
               neg Sign
               call WriteChar
               jmp ReadDigit
@@0:
               cmp al,'0'
               jb ReadDigit
               cmp al,'9'
               ja @@1
               sub al,'0'
               call WriteChar
               ret
@@1:
               cmp al,'A'
               jb ReadDigit
               cmp al,'F'
               ja @@2
               sub al,'A'-10
               call WriteChar
               ret
@@2:
               cmp al,'a'
               jb ReadDigit
               cmp al,'f'
               ja ReadDigit
               sub al,'a'-10
               call WriteChar
               ret
ReadDigit       endp

ReadIntHex      proc
               mov Sign,0
               call WriteChar
               mov dl,'>'
               call WriteChar
               call ReadDigit
               push ax
               call ReadDigit
               call Writeln
               pop dx
               shl dx,4
               or ax,dx
               xor ah,ah
               cmp Sign,0
               jl @@1
               ret
@@1:
               neg ax
               ret
ReadIntHex      endp

Writeln         proc
               mov dl,13
               call WriteChar
               mov dl,10
               call WriteChar
               ret
Writeln         endp

WriteHexDigit   proc
               mov dx,ax
               and dl,0Fh
               cmp dl,10
               jae @@1
               add dl,'0'
               call WriteChar
               ret
@@1:
               add dl,'A'-10
               call WriteChar
               ret
WriteHexDigit   endp

WriteSign       proc
               or ax,ax
               js @@1
               ret
@@1:
               neg ax
               mov dl,'-'
               call WriteChar
               ret
WriteSign       endp

WriteIntHex     proc
               call WriteSign
               rol ax,4
               call WriteHexDigit
               rol ax,4
               call WriteHexDigit
               rol ax,4
               call WriteHexDigit
               rol ax,4
               call WriteHexDigit                                
               ret
WriteIntHex     endp

WriteIntDec     proc
               call WriteSign
               push 0
               mov cx,10
@@1:
               xor dx,dx
               div cx
               add dx,'0' or 0FF00h
               push dx
               or ax,ax
               jnz @@1
@@2:
               pop dx
               or dx,dx
               jz @@exit
               mov ah,2
               int 21h
               jmp @@2
@@exit:
               ret
WriteIntDec     endp

.const
MsgDiv0         db 'Division by zero',13,10,'$'

.data?
Sign            db ?

end
xds
Задача 4:
.model tiny

locals

.code
.startup
               mov ah,0Fh        ;запоминаем текущий видеорежим
               int 10h
               xor ah,ah
               push ax

               lea dx,PromptX    ;чтение входных данных
               call ReadWord
               mov x,ax
               lea dx,PromptY
               call ReadWord
               mov y,ax
               lea dx,PromptW
               call ReadWord
               mov w,ax
               lea dx,PromptH
               call ReadWord
               mov h,ax
               lea dx,PromptC
               call ReadWord
               mov Color,al

               mov ax,13h        ;установка графического режима
               int 10h

               mov ax,0A000h
               mov es,ax

               mov ax,320
               mul y
               add ax,x
               xchg di,ax
               mov bx,w
               mov dx,h
               mov al,Color
               call DrawRect

               xor ax,ax          ;ждем нажатия любой клавиши
               int 16h
               pop ax            ;восстанавливаем прежний видеорежим
               int 10h
               mov ax,4C00h      ;выход
               int 21h

;Вывод прямоугольника
;ES:DI = начальный адрес, BX = ширина, DX = высота, AL = цвет заливки
DrawRect      proc
               or dx,dx
               jz @@exit
               or bx,bx
               jz @@exit
               cld
@@1:
               mov cx,bx
               rep stosb
               add di,320
               sub di,bx
               dec dx
               jnz @@1
@@exit:
               ret
DrawRect      endp

WriteChar       proc
               push ax
               mov ah,2
               int 21h
               pop ax
               ret
WriteChar       endp

ReadWord        proc
               push bp
               mov bp,sp
               sub sp,2
Result          = word ptr [bp-2]

               mov ah,9
               int 21h

               mov Result,0
@@1:
               mov ah,8
               int 21h
               cmp al,13
               je @@2
               cmp al,'0'
               jb @@1
               cmp al,'9'
               ja @@1
               mov dx,ax
               call WriteChar
               sub al,'0'
               xor ah,ah
               xchg cx,ax
               mov ax,10
               mul Result
               add ax,cx
               mov Result,ax
               jmp @@1
@@2:
               mov dl,13
               call WriteChar
               mov dl,10
               call WriteChar
               mov ax,Result
               mov sp,bp
               pop bp
               ret
ReadWord        endp

.const
PromptX         db 'x> $'
PromptY         db 'y> $'
PromptW         db 'Ширина> $'
PromptH         db 'Высота> $'
PromptC         db 'Цвет> $'

.data?
x               dw ?
y               dw ?
w               dw ?
h               dw ?
Color           db ?

end
xds
Покажи, какие "нерабатающие обрывки программ" у тебя есть...
Darkmaximus
unsure.gif Извини что я отвечаю бод никам Darkmaximus я обычно Darkmax ,нижнее сообщение тоже мое, но с моим ником что то случилось
и я почему-то вижу себя как ГОСТЬ-Darkmax- поэтому пришлось зарегится как Darkmaximus. Насчет обрывов программ ты их уж
сделал ,а 2) и 3) задания я в принципи не могу сделать потому что неполучается создать фаил а потом выводить из него что-то или
заменять что-то или темболее выводить что-то в новый фаил. По третиму заданию у меня есть обрывки прог но они очень нелепые
и показывать нечего просто смех (горький смех).
xds
Написал решение задания №2, п. 1-4. Не могу выложить сюда из-за временных проблем с закачкой файлов на форуме. Darkmaximus, скинь мне на ICQ адрес, куда можно отправить код.
Darkmaximus
xds можеш отправить на max1986@atnet.ru это мой мыльник
xds
Отправил два письма. Долетели?
Darkmaximus
:D получил твой проги.
Darkmaximus
СПОСИБО!!!! :D
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.