Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.181.52] |
|
Сообщ.
#1
,
|
|
|
model small .stack 254 .data fname db 'stroka1.txt',0h des dw 0 buff db 20 dup (?) .code start: mov ax,@data mov ds,ax mov es,ax mov ah,3dh ;открываем файл mov al,0 mov dx,offset fname int 21h mov bx,ax mov ah,3fh ;читаем 10 символов mov dx, offset buff mov cx,10 int 21h lea dx,buff ;выводим mov ah,9 int 21h xor ah,ah int 16h mov ax, 4c00h ; Завершение программы int 21h end start У меня выводит много каких-то непонятных символов. В файле txt просто символы 35safqeeh4dgqgwdggq Прикреплённый файлstroka1.txt (19 байт, скачиваний: 102) |
Сообщ.
#2
,
|
|
|
Просто при выводе тоже ищется конец строки '$', не находится, и вываливается весь мусор. Поставьте на последнее место "конец строки" и всё будет хорошо!
|
Сообщ.
#3
,
|
|
|
1) Посмотрите всё же описание int 21h fn 9 - особенно в части определения, где закончить вывод.
2) Зачем резервировать буфер в 20 байтов, если надо читать 10? 3) Да и где гарантия, что это именно 20? директивы .RADIX что-то не видать... квалифицируйте систему счисления явно. Тогда станет понятно, что вместо buff db 20 dup (?) должно быть buff db 0Ah dup (?) term db '$' |
Сообщ.
#4
,
|
|
|
Цитата Akina @ Зачем? По умолчанию используется десятичная. Это не include-файл, чтобы она оказалось неожиданно другой. Да и где гарантия, что это именно 20? директивы .RADIX что-то не видать... квалифицируйте систему счисления явно. |
Сообщ.
#5
,
|
|
|
Цитата Jin X @ Зачем? По умолчанию используется десятичная. Всё, что не описано явно, имеет право быть как угодно. Количество [censored], напоровшихся на проблемы именно из-за надежд на некие умолчания, достаточно велико - какой смысл пополнять их ряды? |
Сообщ.
#6
,
|
|
|
Akina, не ну если загоняться по каждому поводу, тогда нужно при компиляции задавать 100500 ключей и прописывать десятки директив внутри каждого исходника.
Ещё можно понять, когда значение по умолчанию может прыгать в разных версиях или опциях компилятора. А тут... мне вот даже интересно, какие могут быть проблемы из-за незаданного RADIX'а? Откуда может возникнуть не тот RADIX? |
Сообщ.
#7
,
|
|
|
Цитата Jin X @ если загоняться по каждому поводу, тогда нужно при компиляции задавать 100500 ключей и прописывать десятки директив внутри каждого исходника. Вот это как раз и снимается соотв. инклюдом и заданием стандартных опций через переменные среды или ассоциацию типа. Цитата Jin X @ какие могут быть проблемы из-за незаданного RADIX'а? Неправильная интерпретация значений числовых литералов - гарантированная проблема. И хорошо, что обычно - ещё на стадии компиляции... Цитата Jin X @ Откуда может возникнуть не тот RADIX? Ну это не ко мне, это к гадалкам. А я лучше укажу явно - и заодно на гадалках сэкономлю. |
Сообщ.
#8
,
|
|
|
Цитата Akina @ С чего она будет интерпретирована неправильно-то? RADIX не может быть не равен 10, если он не задан...Неправильная интерпретация значений числовых литералов - гарантированная проблема. В данном случае это явно лишнее. Ну это примерно то же самое, что писать ASSUME CS:@CODE, DS:@CODE, ES:@CODE, SS:@CODE после .MODEL Tiny + .CODE... на всякий случай |
Сообщ.
#9
,
|
|
|
Цитата Jin X @ Ну это примерно то же самое, что Ну как бы .MODEL Tiny включает в себя и ASSUME CS:@CODE, DS:@CODE, ES:@CODE, SS:@CODE в точке входа. В то же время ничто не мешает такой программе использовать предопределённые блоки памяти (например, нулевой сегмент или там сегмент BIOS data, описанный в инклюде по типу BIOS_DATA SEGMENT AT 40h), настраивать на них сегментные регистры, и соответственно в коде, несмотря на моделю, появятся дополнительные ASSUME. |