Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Assume в ASM - непонятки

11K
08 апреля 2006 года
ArtemESC
14 / / 19.02.2006
Помогите пожалуйста разобраться с ASSUME, почему-то
следующий код работает неправильно, я начинаю
отлаживать программу debug-ером - и вижу что
программа начинает исполняется с первого сегмента!?

title CharProcessing

text segment
txt db 200 dup (?)
text ends

stack segment
S db 100 dup (?)
stack ends

INCH macro x
mov ah, 7h
int 21h
mov bl, al
mov x, bl
endm

OUTCH macro c
mov dl, c
mov ah, 2h
int 21h
endm

FINISH macro
mov ax, 4C00h
int 21h
endm

NEWLINE macro
OUTCH 13
endm

code segment
assume cs: code, ds: text, ss: stack
; set start params
OUTCH '>'
cld
mov ax, text
mov ds, ax
mov ax, stack
mov ss, ax
mov di, 0h
mov si, 0h

; read text
Read:
INCH al
cmp al, '.'
je Next
stosb
jmp Read

; print source text
Next:
lodsb
OUTCH al
cmp si, di
jbe Next

; test
mov al, [di]
cmp al, 'A'
jb Prop2
cmp al, 'Z'
jg Prop2
mov si, 0h
Next2:
cmp al, ds: [si]
je Prop2
inc si
cmp si, di
jb Next2
call rule1
jmp Result

Prop2:
call rule2
jmp Result

; rule # 1
rule1 proc
mov si, 0h
L:
lodsb
cmp al, 'a'
jb Cont
cmp al, 'z'
jg Cont
add al, 32
mov ds: [si], al
Cont:
cmp si, di
jbe L
ret
rule1 endp

; rule # 2
rule2 proc
mov si, di
mov cx, si
std
L1:
lodsb
push ax
loop L1
cld
mov cx, di
mov di, 0h
L2:
pop ax
mov ah, al
stosw
loop L2
ret
rule2 endp

; print result code
NEWLINE
Result:
mov cx, di
L:
lodsb
OUTCH al
loop L

FINISH
code ends

end
17K
10 апреля 2006 года
Potter
6 / / 07.04.2006
Такая фигня бывает попробуй зделать так:

title CharProcessing

text segment
txt db 200 dup (?)
text ends

stk segment stack
db 100 dup (?)
stk ends

code segment
assume cs: code, ds: text, ss: stk

; дальше объявления макросов
;--------------------------------
INCH macro x
mov ah, 7h
int 21h
mov bl, al
mov x, bl
endm
;---------------------------------
OUTCH macro c
mov dl, c
mov ah, 2h
int 21h
endm
;---------------------------------
FINISH macro
mov ax, 4C00h
int 21h
endm
;---------------------------------
NEWLINE macro
OUTCH 13
endm
;---------------------------------

; теперь основная прога

begin:
mov ax, text
mov ds, ax

mov ax, stk
mov ss, ax
;---------------------------------
; здесь код проги
;---------------------------------
; и наконец выход
mov ah, 4ch
int 21h
code ends
end begin

Обрати внимание как стек надо делать :). Теперь должно работать!!! :D
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог