Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2015, 15:11   #1
Влад_+_
Пользователь
 
Регистрация: 22.12.2015
Сообщений: 10
По умолчанию Определить и вывести на экран информацию о стране (DOS 38h).

Форумчане, помогите пожалуйста с л/р. Выводит иероглифы. Помогите исправить.
Код:
.286	
.model small
.code
start:  mov ax,@data
	mov ds,ax
	mov es,ax
	mov ax,3800h
	mov dx,offset buffer
	int 21h
	mov di,offset table
	mov cx,num
	repne scasw
	mov dx,[di]
	mov ah,9
	int 21h
	mov ah,0
	int 16h
	mov ah,4Ch
	int 21h
.data
buffer db 20 dup (?)
table dw 1, USA, 2, CanFr, 3, LatAm, 4, CanEn, 7, Ru, 20, Egt
        dw 27,SA,30,Gre,31,Net,32,Bel,33,Fr,34,Spa,35,Bul,36,Hun
num = ($ - table)/2
USA   db       "United States$"
CanFr db       "Canadian-French"
LatAm db       "Latin America$"
CanEn db       "Canada (English)$"
Ru      db       "Russia$"
Egt     db      "Egypt$"
SA      db      "South Africa$"
Gre     db      "Greece$"
Net     db      "Netherlands$"
Bel      db      "Belgium$"
Fr       db      "France$"
Spa     db      "Spain$"
Bul      db      "Bulgaria$"
Hun     db      "Hungary$"
end start
Изображения
Тип файла: jpg Снимок.jpg (83.9 Кб, 114 просмотров)
Влад_+_ вне форума Ответить с цитированием
Старый 22.12.2015, 18:38   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

..почитай про эту функцию в справочнике. Там сказано, что если на входе AL нуль, то результат возвращается в ВХ. Буфер в данном случае вообще не нужен. Получил код страны в ВХ и переходи по-нему в таблице переходов. Вот тебе код на FASM:
Код:
USE16
ORG 100h
JMP start

mess0   DB   'Country info: $'
table   dw   1,USA, 2,CanFr, 3,LatAm, 4,CanEn, 7,Ru, 20,Egt, 36,Hun
        dw   27,SA, 30,Gre,  31,Net, 32,Bel,  33,Fr, 34,Spa, 35,Bul
num     =    ($ - table)/2
USA     db   "United States$"
CanFr   db   "Canadian-French"
LatAm   db   "Latin America$"
CanEn   db   "Canada (English)$"
Ru      db   "Russia$"
Egt     db   "Egypt$"
SA      db   "South Africa$"
Gre     db   "Greece$"
Net     db   "Netherlands$"
Bel     db   "Belgium$"
Fr      db   "France$"
Spa     db   "Spain$"
Bul     db   "Bulgaria$"
Hun     db   "Hungary$"

start:
   MOV   AH,9                       ; мессага юзверю
   MOV   DX,mess0
   INT   21h

   MOV   AX,3800h                   ; AL = 0
   INT   21h                        ; возвращает код страны в BX

   XCHG  AX,BX                      ; отправляем его в AX для SCASW
   MOV   DI,table                   ; DI = таблица переходов
   MOV   CX,num 
   REPNE SCASW                      ; ищем код в таблице переходов

   MOV   DX,[DI]                    ; отправляем адрес в DX
   MOV   AH,9                       ; и выводим результат на экран
   INT   21h

exit:
   XOR   AX,AX                     ; ждём клавишу и на выход
   INT   16h
   INT   20h
Изображения
Тип файла: gif 0122.gif (5.1 Кб, 36 просмотров)
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 22.12.2015, 20:06   #3
Влад_+_
Пользователь
 
Регистрация: 22.12.2015
Сообщений: 10
По умолчанию

А на windows 7 x64 получится запустить ?
Влад_+_ вне форума Ответить с цитированием
Старый 22.12.2015, 20:52   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,725
По умолчанию

ДосБокс в помощь
p51x вне форума Ответить с цитированием
Старый 22.12.2015, 21:35   #5
Влад_+_
Пользователь
 
Регистрация: 22.12.2015
Сообщений: 10
По умолчанию

Попробовал DOX-BOX. Выводит опять иероглифы(((http://upload.akusherstvo.ru/image906869.jpg Может я что то не так делаю.
Влад_+_ вне форума Ответить с цитированием
Старый 22.12.2015, 22:17   #6
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Возьмите турбодебугер. Там можно выполнить код по шагам и посмотреть что куда и как. Отладите свой код и будет вам счастье.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Определить и вывести на экран информацию о стране (DOS 38h). INSIDER73 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 20 22.12.2015 15:41
Задание: Сгенерировать и вывести на экран массив А 10x10 случайных реальных чисел в диапазоне от 1 до 9. Определить по А и вывести Don202 Помощь студентам 1 25.09.2013 11:26
Определить и вывести на экран количество логических дисков Satura Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 07.12.2012 15:36
Вывести на экран информацию о всех диск windetta35555 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 31.05.2011 20:02
Создать файл записей (таблицу) и вывести на экран информацию о людях (имя, год рожденя, день рождения) пепелаЦО Паскаль, Turbo Pascal, PascalABC.NET 3 24.05.2009 12:15