Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [ASSEMBLER] Задаем вопросы (для новичков) (https://forum.antichat.xyz/showthread.php?t=70421)

x-treem 25.06.2007 12:01

у мну лам проблем.

имеется такой код на масм:

Код:

.DATA
Buff db 100

.code
start:
mov [Buff], byte "A"
end start:

надо вообщем в буффер вставить А.
но ошибка.
помогите пожалуйсто

slesh 25.06.2007 12:08

2 x-treem тебе нужно весь буфер забить символом A?
Если а то вот код на FASM

Код:

xor edi,edi
m:
mov [Buff+edi], byte "A"
inc edi
cmp edi,100
jbe m

я с масм не работал, поэтому незнаю прокатит
mov [Buff+edi], byte "A" или нет.
Ты попробуй сделать так:
Код:

xor edi,edi
lea ebx,buff
mov al,"A"

m:
mov [ebx+edi], byte al
inc edi
cmp edi,100
jbe m


x-treem 25.06.2007 12:11

не, мне нуна добавлять туда символы.
сначала например А
потом Hello
потом puki

а потом вывести в мессаджбоксе

iv. 25.06.2007 12:13

2x-treem:
Если мне не изменяет память, так работать с памятью нельзя. Надо через регистры.
Типа:
mov AL, byte "A"
mov [Buff], AL

slesh 25.06.2007 12:16

Цитата:

Сообщение от x-treem
не, мне нуна добавлять туда символы.
сначала например А
потом Hello
потом puki

а потом вывести в мессаджбоксе

Ну тогда юзай АПИ функцию
Код:

mov [Buff], 0

invoke lstrcat,[Buff],'HELLO'  ; добавить данные к буферу


GlOFF 25.06.2007 12:23

iv. с памятью можно так работать, это же не из одного места памяти в другое, это в область памяти число пересылается... команда mov - это сделать в силах! mov Buff, "A" ;)

x-treem
Код:

.386 
.model  flat, stdcall 
option  casemap:none 
 
.DATA? 
Buff db 100 dup(?) 
 
.code 
start: 
mov [Buff], "A" 
ret 
end start

Нужно было обьявить правильно буфер "Buff db 100 dup(?)" + "end start:" - двоеточие не нужно...

P.S. x-treem Символы добавляются откуда? из DATA или просто в коде по штуке? или тебе сразу строку можно в буфер положить?

x-treem 25.06.2007 12:29

у мну lstrcat не работает. то естьвот

Цитата:

.DATA

Buff db 100

.CODE

start:

mov al, "И"
mov [Buff], al
xor al,al
mov al, "з"
add [Buff+1], al
add [Buff+2], al
mov [Buff], 0
invoke lstrcat,[Buff],"HELL"
invoke MessageBox, 0, addr Buff, addr Buff, MB_OK
invoke ExitProcess, NULL
end start
и нету мессадж бокса. да и вообще только 4 символа можно добавить
что тут не так?

GoreMaster 25.06.2007 12:43

Цитата:

invoke lstrcat,[Buff],"HELL"
"HELL" должна быть определена в .data как строка
---------Пример функции lstrcat----------------
.data
hell db "HELL",0
.code
invoke lstrcat,addr Buff,addr hell
------------------Работа с символами-------------------
lea edi, Buff
mov al, "и"
mov byte ptr ds:[edi] , al
xor al,al
inc edi
mov al,"з"
mov byte ptr ds:[edi] ,al

имхо так

GlOFF 25.06.2007 12:46

x-treem Если ты пишешь на masm'e то все данные в виде строк и т.д. нужно хранить в .data ,а буферы в .data? ... В fasm'e немного по другому...
Код:

;###################################################

      .386
      .model flat, stdcall
      option casemap :none  ; case sensitive

;###################################################

      include C:\masm32\include\windows.inc
      include C:\masm32\include\user32.inc
      include C:\masm32\include\kernel32.inc

      includelib C:\masm32\lib\user32.lib
      includelib C:\masm32\lib\kernel32.lib 

;###################################################

.DATA
Buff        db 100 dup(?)
szMsg        db "Hello",0

;###################################################

.code
start:
        mov Buff, "A"
        invoke MessageBox, 0, ADDR Buff, ADDR Buff, 40h

        invoke MessageBox, 0, ADDR szMsg, ADDR szMsg, 40h

        invoke lstrcpy, ADDR Buff, ADDR szMsg
        invoke MessageBox, 0, ADDR Buff, ADDR Buff, 40h

        invoke ExitProcess, 0
end start

;###################################################

Некоторые приемы вывода в Мессаге...

Tikson 04.07.2007 13:03

как обычно компилю тасмом com программу
--------------------код------------------------
cseg segment
assume cs:cseg, ds:cseg,es:cseg,ss:cseg
org 100h
start:
mov ax, 0b800h
mov es,ax
mov di, 0

mov ah,31
mov al, 1
mov es:[di], ax
mov ax, 10h
int 16h
int 20h
cseg ends
end start
--------------------код------------------------
tasm program.asm
tlink program.obj/t/x

все ок(тасм ошибок никаких не выдает) , запускаю из командной строчки и программа виснет(ОС не виснет) , смайлик не выводится.... хотя раньше выводился. В чем может быть проблема?


Время: 01:23