![Фотография](https://vse.kz/uploads/av-24979.jpg?_r=0)
Ассемблеркто знает напишите плиз
#5
Отправлено 03.07.2007, 16:40:23
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
четыре строки
2 прямоугольник разбитый по диоганалям и серединам и получившийся каждый треугольник закрасить разным цветом
3 (a*b)/c Значения a dw 4
b dw 4
c dw 4
прямоугольник разбитый на четыре части
верхняя левая вывести на экран a*b/c верхняя правая часть вывести a dw 4
b dw 4
c dw 4
нижняя левая Gr E3B
нижняя правая Имя
#11
Отправлено 05.07.2007, 09:47:58
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Ну и еще мне лично очень помогло - это книга Зубкова "ассемблер в виндовс юникс...". Без этой книги никуда бы не пошел... И компилить можно обычным TASM-ом... Сегодня не получится посмотреть твои задачки... так может подсказал что-нить
#14
Отправлено 20.04.2013, 19:00:30
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Некоторые программы могу скомпилировать в файл типа COM, а некоторые не могу.
Использую NASM.
Компиляция осуществляется следующим образом: C:\>nasm Dispsec.asm -o Dispsec.com
После выходит ошибка, называется "label or instruction expected at start of line"
Объясните пожалуйста, где в проге ошибка:
главная процедура:
org 100h
jmp Disp_line
; Данные программы
Sector db 10h, 11h, 12h, 13h, 14h, 15h, 16h, 17h; Образец текста
db 18h, 19h, 1Ah, 1Bh, 1Ch, 1Dh, 1Eh, 1Fh;
; ---------------------------------------------------------------
; Процедура дампирует 16 байт памяти в одну строку шестнадцатеричных чисел
; -------------------------------------------------------------------------
; Вызовы: Write_hex, Write_char
; Чтение: Sector
;
Disp_line:
xor bx,bx ; Обнуление BX
mov cx,16 ; Счетчик байтов
.M: mov dl, [Sector+bx] ; Получить 1 байт
call Write_byte_hex ; Вывод шестнадцатеричного числа
mov DL, ' ' ; вывод на экран пробела
call Write_char
inc bx ; возврат за следующим байтом
loop .M
mov ax,4c00h
int 21h ; возврат в DOS
%include 'Videoio.asm' ; подсоединение процедур
Вызываемая процедура:
; Вывод двузначного шестнадцатеричного числа
; ------------------------------------------
; Входы: DL содержит выводимое число
; Вызовы: Write_digit_hex
Write_byte_hex:
mov bl,dl ; Write_byte_hex
mov cl,4
shr dl,cl
call Write_digit_hex
mov dl,bl
and dl,0fh
call Write_digit_hex
ret
; Вывод шестнадцатеричной цифры
; ------------------------------------------
; Входы: BL содержит шестнадцатеричную цифру
; Вызовы: Write_char
Write_digit_hex:
cmp dl,09h ; Write_digit_hex
ja label_b
add dl,30h
jmp label_c
label_b:
add dl,37h
label_c:
call Write_char
ret
; Вывод символа на экран
; -------------------------------------------
; Входы: DL содержит код символа, выводимый на экран
;
Write_char:
push ax
mov ah,2
int 21h
pop ax
ret
#15
Отправлено 20.04.2013, 23:31:49
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Скомпилировал Ваш текст как есть, убрав инструкцию includeНекоторые программы могу скомпилировать в файл типа COM, а некоторые не могу. Использую NASM. Компиляция осуществляется следующим образом: C:\>nasm Dispsec.asm -o Dispsec.com После выходит ошибка, называется "label or instruction expected at start of line"
Проверяйте файл videoio.asm
#17
Отправлено 21.04.2013, 12:30:57
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Да, я просто скопировал текст как есть в один файл и закоментировал ненужное. Программа работает, правда цикл бесконечный. Почему?Спасибо за интерес,
А Вы вставили главную процедуру и вспомогательную в один файл?
Просто главная процедура - это один файл Dipsec.asm, и вызываемая это - Videoio.asm.
P.S. Вызываемые процедуры это: Write_digit_hex, Write_digit_hex и Write_char, а Videoio.asm - подключаемый модуль.
Сообщение отредактировал vladimir55: 21.04.2013, 12:33:06
#18
Отправлено 21.04.2013, 18:13:06
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
"
Disp_line:
xor bx,bx ; Обнуление BX
mov cx,16 ; Счетчик байтов
.M: mov dl, [Sector+bx] ; Получить 1 байт
call Write_byte_hex ; Вывод шестнадцатеричного числа
mov DL, ' ' ; вывод на экран пробела
call Write_char
inc bx ; возврат за следующим байтом
loop .M
"
Вроде все правильно mov cx,16 - т.е. счетчик установлен. Я конечно потом попытаюсь через Дебаггер, но не думаю, что это поможет.
Вы скомпилировали через NASM, если да, то через какой (номер)? Вы скомплировали, через C:\>nasm Dispsec.asm -o Dispsec.com ?
Вы не знаете как это прописать в MASM, чтобы два файла отдельно скомпилировать, т.е. в MASM вместо оператора %include какой оператор используется?
#19
Отправлено 22.04.2013, 00:28:24
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
http://ru.wikipedia.org/wiki/MASMВы не знаете как это прописать в MASM, чтобы два файла отдельно скомпилировать, т.е. в MASM вместо оператора %include какой оператор используется?
#20
Отправлено 24.05.2013, 08:29:32
![](https://vse.kz/public/style_images/osnovnoi34/post_offline.png)
Чтобы не было бесконечного цикла, в процедуре Write_byte_hex нужно СХ поместить в стек, то есть, в первой строке процедуры поместить команду PUSH CX, а перед ret POP CX.Насчет цикла:
"
Disp_line:
xor bx,bx ; Обнуление BX
mov cx,16 ; Счетчик байтов
.M: mov dl, [Sector+bx] ; Получить 1 байт
call Write_byte_hex ; Вывод шестнадцатеричного числа
mov DL, ' ' ; вывод на экран пробела
call Write_char
inc bx ; возврат за следующим байтом
loop .M
"
Вроде все правильно mov cx,16 - т.е. счетчик установлен. Я конечно потом попытаюсь через Дебаггер, но не думаю, что это поможет.
Вы скомпилировали через NASM, если да, то через какой (номер)? Вы скомплировали, через C:\>nasm Dispsec.asm -o Dispsec.com ?
Вы не знаете как это прописать в MASM, чтобы два файла отдельно скомпилировать, т.е. в MASM вместо оператора %include какой оператор используется?
Количество пользователей, читающих эту тему: 1
пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0