Thread View: pl.comp.lang.asm
3 messages
3 total messages
Started by robert
Thu, 30 Nov 2006 15:50
newbie
Author: robert
Date: Thu, 30 Nov 2006 15:50
Date: Thu, 30 Nov 2006 15:50
68 lines
2106 bytes
2106 bytes
Witam. Napisałem poniższy kod, który się kompiluje, ale już nie likuje.
1) komunikat błędu: _show_txt unresolved external. Wydaje mi się, że nie
może odszukać procedury show_txt znajdującej się w kod_2 sgement;
2) po usunięciu lini .model small argument napis procedury show_txt musi
być zadeklarowany jako dword, inaczej progr. się nie skompiluje. Oznacza to,
że addr
zwraca 32bitowy adres [seg+offset], dlaczego ?
Bardzo prosze o pomoc i pozdrawiam.
.model small
.386
show_txt proto far C count:byte, napis:word, data_sem:word
show_mac macro ile:req, napis:req, data:req
push ax
push cx
push dx
mov ax,data
mov ds,ax
mov cx,ile
LOCAL petla:
mov ah,9h
mov ax,data
lea dx,napis
int 21h
loop petla
pop dx
pop cx
pop ax
endm
Moj_stos segment stack
db 256 dup (?)
Moj_stos ends
Dane segment
napis db "Komuunikat", 0dh,0ah,"$"
licznik db ?
Dane ends
kod_1 segment 'code'
assume cs:kod_1,ds:Dane
start:
mov ax,seg Dane
mov ds,ax
invoke show_txt, licznik, addr napis, seg napis
kod_1 ends
end start
kod_2 segment 'code'
assume cs:kod_2,ds:nothing
show_txt proc far C uses ax ds, count:byte, nap:word, data_sem:word
show_mac
ret
show_txt endp
kod_2 ends
Re: newbie
Author: Matuzalem
Date: Thu, 30 Nov 2006 21:33
Date: Thu, 30 Nov 2006 21:33
81 lines
2873 bytes
2873 bytes
robert napisał(a): > Witam. Napisałem poniższy kod, który się kompiluje, ale już nie likuje. > 1) komunikat błędu: _show_txt unresolved external. Wydaje mi się, że nie > może odszukać procedury show_txt znajdującej się w kod_2 sgement; > 2) po usunięciu lini .model small argument napis procedury show_txt musi > być zadeklarowany jako dword, inaczej progr. się nie skompiluje. Oznacza to, > że addr > zwraca 32bitowy adres [seg+offset], dlaczego ? > > Bardzo prosze o pomoc i pozdrawiam. > > .model small > .386 > > show_txt proto far C count:byte, napis:word, data_sem:word > > show_mac macro ile:req, napis:req, data:req > push ax > push cx > push dx > > mov ax,data > mov ds,ax > > mov cx,ile > LOCAL petla: > mov ah,9h > mov ax,data > lea dx,napis > int 21h > loop petla > > pop dx > pop cx > pop ax > endm > > Moj_stos segment stack > db 256 dup (?) > Moj_stos ends > > Dane segment > napis db "Komuunikat", 0dh,0ah,"$" > licznik db ? > Dane ends > > kod_1 segment 'code' > assume cs:kod_1,ds:Dane > start: > mov ax,seg Dane > mov ds,ax > > invoke show_txt, licznik, addr napis, seg napis > > kod_1 ends > end start > > kod_2 segment 'code' > assume cs:kod_2,ds:nothing > > show_txt proc far C uses ax ds, count:byte, nap:word, data_sem:word > > show_mac > > ret > > show_txt endp > > kod_2 ends Witam O ile dobrze pamiętam w konwencji wywołań dla języka C (show_txt proto far C ...) domyślnie występuje znak podkreślenia "_" przed nazwą funkcji, a ponieważ show_txt nie posiada owego podkreślenia - czego spodziewa się linker - więc wywala błąd: _show_txt unresolved external Pozdrawiam
Re: newbie
Author: Bernard
Date: Thu, 30 Nov 2006 22:12
Date: Thu, 30 Nov 2006 22:12
57 lines
2205 bytes
2205 bytes
robert wrote: > Witam. Napisałem poniższy kod, który się kompiluje, ale już nie likuje. > 1) komunikat błędu: _show_txt unresolved external. Wydaje mi się, że nie > może odszukać procedury show_txt znajdującej się w kod_2 sgement; > 2) po usunięciu lini .model small argument napis procedury show_txt musi > być zadeklarowany jako dword, inaczej progr. się nie skompiluje. Oznacza to, > że addr > zwraca 32bitowy adres [seg+offset], dlaczego ? > > Bardzo prosze o pomoc i pozdrawiam. > > .model small > .386 > > show_txt proto far C count:byte, napis:word, data_sem:word A dlaczego "far", skoro był "model small"? Skoro używasz "nowych" dyrektyw, to dlaczego jednocześnie otwierasz segmenty "po staremu"? > Moj_stos segment stack > db 256 dup (?) > Moj_stos ends > > Dane segment > napis db "Komuunikat", 0dh,0ah,"$" > licznik db ? > Dane ends > > kod_1 segment 'code' > assume cs:kod_1,ds:Dane > start: > mov ax,seg Dane > mov ds,ax > > invoke show_txt, licznik, addr napis, seg napis > > kod_1 ends > end start > > kod_2 segment 'code' > assume cs:kod_2,ds:nothing Dwa segmenty kodu w modelu SMALL?! Też bym zgłupiał na miejscu konsolidatora... > show_txt proc far C uses ax ds, count:byte, nap:word, data_sem:word > > show_mac > > ret > > show_txt endp > > kod_2 ends
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads