Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 5 của 5
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    ASM ứng dụng nhỏ hiểu thêm VC++

    Mã:
    .386
    .model flat,stdcall
    include windows.inc
    include kernel32.inc
    include user32.inc
    includelib kernel32.lib
    includelib user32.lib
    
    .data?
    Messageboxcaption dd "chao cac ban",0
    MessageBoxText dd "Abc",0
    .code
    start:
    
    invoke MessageBox,NULL,addr Messageboxcaption,addr MessageBoxText ,MB_OK
    invoke ExitProcess,NULL
    end start
    Mình có dùng WinASM biên dịch cái này thì thấy báo lỗi thế này


    C:\Documents and Settings\MR\Desktop\ASM co ban\df.asm(12) : warning A4014: instructions and initialized data not supported in BSS segments
    C:\Documents and Settings\MR\Desktop\ASM co ban\df.asm(13) : warning A4014: instructions and initialized data not supported in BSS segments
    vậy tại sao nó sai vậy

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Hai dòng Messageboxcaption và MessageBoxText bạn không thể khai báo trong data? được, data? chỉ dành cho dữ liệu chưa khởi tạo

    2 dòng này bạn phải khai báo trong data, tức là bỏ dấu ? đi

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình nghe nói nếu DATA ? thì sẽ đỡ tốn dung lượng của file exe hơn [IMG]images/smilies/smile.png[/IMG],mình thử làm như thế này
    Mã:
    .386
    .model flat,stdcall
    include windows.inc
    include kernel32.inc
    include user32.inc
    includelib kernel32.lib
    includelib user32.lib
    
    .data?
    Messageboxcaption dd ?
    MessageBoxText dd ?
    .code
    start:
    
    invoke MessageBox,NULL,addr Messageboxcaption,addr MessageBoxText ,MB_OK
    invoke ExitProcess,NULL
    end start
    Vậy thì làm thế nào để khởi tạo được 2 biến đó kiểu như thế này
    Messageboxcaption dd "chao cac ban",0
    MessageBoxText dd "Abc",0

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Data sections được chia ra làm 3 lọai :

    .DATA – chỉ rõ đây là section dành cho dữ liệu và dữ liệu (cụ thể là các biến) được gán giá trị khởi tạo ngay từ đầu chương trình của bạn.

    .DATA? – chỉ rõ đây là section chứa dữ liệu không được gán giá trị khởi tạo. Đôi khi bạn muốn chỉ định vài vùng nhớ nhưng không muốn cho nó chứa giá trị nào lúc khởi tạo. Section này dành cho mục đích đó. Lợi thế của chỉ thị này là : không chiếm khoảng trống trong file thực thi (hay nói cách khác kích thước của file trên đĩa không tăng khi sử dụng chỉ thị này để chứa dữ liệu).

    Ví dụ : Nếu bạn chỉ định 10.000 Bytes (10 KB) trong khai báo .DATA? section, file exe của bạn sẽ không tăng thêm 10.000 Bytes. Kích thước của nó sẽ không nhiều như vậy. Ở đây bạn chỉ nói cho asm biết khoảng trống bao nhiêu bạn cần khi chương trình được load vào bộ nhớ.

    .CONST – chỉ rõ đây là section chứa hằng số được dùng trong chương trình của bạn. Những hằng số trong section này sẽ không thay đổi.

    Chú ý : không cần phải sử dụng cả 3 section trên trong chương trình của bạn. Chỉ khai báo những section nào bạn muốn dùng.

    Ứng với trường hợp chương trình của bạn, thì bạn khai báo như sau:

    Mã:
    .386
    .model flat,stdcall
    
    include windows.inc
    include kernel32.inc
    include user32.inc
    includelib kernel32.lib
    includelib user32.lib
    
    .data
    Messageboxcaption db "chao cac ban",0
    MessageBoxText db "Abc",0
    .code
    start:
    
    invoke MessageBox,NULL,addr Messageboxcaption,addr MessageBoxText ,MB_OK
    invoke ExitProcess,NULL
    end start

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Bạn phải có data thì mới hiện được ra chứ, nếu không thì không thể được.

    Nếu bạn muốn dùng thế thì có 1 cách khác, nhưng suy cho cùng thì đâu vẫn vào đấy , dung lượng file obj thì giảm sau khi dịch nhưng file exe theo tớ thì vẫn thế sau khi link: cho các xâu của bạn vào stringTable trong resource.

    Bạn dùng hàm LoadString để lấy các xâu , hàm này yêu cầu 1 bộ đệm để chứa xâu.
    Cón nếu để chương trình tự sinh cả dữ liệu thì tớ chịu

 

 

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •