[Programming] được viết bằng ASm nhưng sao nó lại khác nhau |
25/11/2007 10:10:42 (+0700) | #1 | 99883 |
|
kegiaumat055
Member
|
0 |
|
|
Joined: 28/06/2007 22:19:18
Messages: 25
Offline
|
|
Anh ơi cho em hỏi 2 chương trình Hello.asm này đều được viết bằng ASm nhưng sao nó lại khác nhau.Anh có thể giải thích được không và chọn cách viết nào là tốt nhất
Đây là hello.asm thứ nhất:
Code SEGMENT
ASSUME CS:Code,DS:Code
ORG 100h
Begin
MOV AH,09h
MOV DX,Offset String
Int 20h
String DB ' hello,how are you ? $ '
Code Ends
END Begin
Đây là hello.asm thứ hai:
.model small
.stack 100h
.data
s DB “hello,how are you ? $” ; khai báo xâu kí tự cần in
.code
mov AX,@data ; lấy địa chỉ data segment ghi vào DS
mov DS,AX ; Vì model small, đây cũng là địa chỉ
; segment của xâu s
; xuất chuỗi
mov DX, OFFSET s ; lấy địa chỉ offset ghi vào DX
mov AH , 9
int 21h ; gọi hàm 9, ngắt 21h để in
mov AH, 4Ch ; Thoát khỏi chương trình
int 21h
end |
|
|
|
|
[Question] Re: được viết bằng ASm nhưng sao nó lại khác nhau |
26/11/2007 03:40:08 (+0700) | #2 | 100021 |
|
kegiaumat055
Member
|
0 |
|
|
Joined: 28/06/2007 22:19:18
Messages: 25
Offline
|
|
Sao không có ai trả lời vậy |
|
|
|
|
[Question] được viết bằng ASm nhưng sao nó lại khác nhau |
26/11/2007 03:50:51 (+0700) | #3 | 100023 |
sdkvietnam
Member
|
0 |
|
|
Joined: 24/11/2007 16:53:33
Messages: 1
Offline
|
|
kegiaumat055 wrote:
Anh ơi cho em hỏi 2 chương trình Hello.asm này đều được viết bằng ASm nhưng sao nó lại khác nhau.Anh có thể giải thích được không và chọn cách viết nào là tốt nhất
Đây là hello.asm thứ nhất:
Code SEGMENT
ASSUME CS:Code,DS:Code
ORG 100h
Begin
MOV AH,09h
MOV DX,Offset String
Int 20h<- ngat 21 ha ban
String DB ' hello,how are you ? $ '
Code Ends<- cai nay o cuoi no nam truoc end begin
END Begin
ban hoi no khac nhau o cho nao thi moi tra loi duoc chu ban |
|
|
|
|
[Question] được viết bằng ASm nhưng sao nó lại khác nhau |
26/11/2007 06:20:25 (+0700) | #4 | 100043 |
|
mystery_hacker
Member
|
0 |
|
|
Joined: 30/06/2006 16:16:03
Messages: 365
Location: Khánh Hòa
Offline
|
|
kegiaumat055 wrote:
Anh ơi cho em hỏi 2 chương trình Hello.asm này đều được viết bằng ASm nhưng sao nó lại khác nhau.Anh có thể giải thích được không và chọn cách viết nào là tốt nhất
Đây là hello.asm thứ nhất:
Code SEGMENT
ASSUME CS:Code,DS:Code
ORG 100h
Begin
MOV AH,09h
MOV DX,Offset String
Int 20h
String DB ' hello,how are you ? $ '
Code Ends
END Begin
Đây là hello.asm thứ hai:
.model small
.stack 100h
.data
s DB “hello,how are you ? $” ; khai báo xâu kí tự cần in
.code
mov AX,@data ; lấy địa chỉ data segment ghi vào DS
mov DS,AX ; Vì model small, đây cũng là địa chỉ
; segment của xâu s
; xuất chuỗi
mov DX, OFFSET s ; lấy địa chỉ offset ghi vào DX
mov AH , 9
int 21h ; gọi hàm 9, ngắt 21h để in
mov AH, 4Ch ; Thoát khỏi chương trình
int 21h
end
Mình ko nhớ rõ nhưng hình như là chương trình thứ nhất được viết theo chỉ dẫn phân đoạn chuẩn còn chương trình thứ hai được viết theo chỉ dẫn phân đoạn đơn giản. Viết theo cách thứ 2 thường sẽ giúp chương trình ngắn gọn và dễ hiểu hơn! |
|
|
|
|
[Question] được viết bằng ASm nhưng sao nó lại khác nhau |
26/11/2007 07:23:30 (+0700) | #5 | 100062 |
|
pthanhkim
Member
|
0 |
|
|
Joined: 06/03/2005 20:07:28
Messages: 27
Offline
|
|
kegiaumat055 wrote:
Anh ơi cho em hỏi 2 chương trình Hello.asm này đều được viết bằng ASm nhưng sao nó lại khác nhau.Anh có thể giải thích được không và chọn cách viết nào là tốt nhất
Đây là hello.asm thứ nhất:
Code SEGMENT
ASSUME CS:Code,DS:Code
ORG 100h
Begin
MOV AH,09h
MOV DX,Offset String
Int 20h
String DB ' hello,how are you ? $ '
Code Ends
END Begin
Đây là hello.asm thứ hai:
.model small
.stack 100h
.data
s DB “hello,how are you ? $” ; khai báo xâu kí tự cần in
.code
mov AX,@data ; lấy địa chỉ data segment ghi vào DS
mov DS,AX ; Vì model small, đây cũng là địa chỉ
; segment của xâu s
; xuất chuỗi
mov DX, OFFSET s ; lấy địa chỉ offset ghi vào DX
mov AH , 9
int 21h ; gọi hàm 9, ngắt 21h để in
mov AH, 4Ch ; Thoát khỏi chương trình
int 21h
end
Chương trình 1 không cần đoạn stack mặc định IP Flags=100h không có đoạn DATA. Chương trình 2 sử dụng stack và có đoạn DATA
Thân chào |
|
|
|
|
[Question] Re: được viết bằng ASm nhưng sao nó lại khác nhau |
26/11/2007 10:58:29 (+0700) | #6 | 100147 |
|
computerline
Member
|
0 |
|
|
Joined: 30/03/2007 13:46:50
Messages: 144
Offline
|
|
Mình cũng chỉ mới học qua ASM nhưng theo mình thì hai chương trình này khác nhau là vì nó được viết cho 2 trình compiler khác nhau.
Trình thứ nhất được viết cho trình dịch MASM 16 bit.
Code:
Code SEGMENT
ASSUME CS:Code,DS:Code
ORG 100h
Begin
MOV AH,09h
MOV DX,Offset String
Int 20h
String DB ' hello,how are you ? $ '
Code Ends
END Begin
Còn trình thứ hai được viết cho trình dịch TASM 16 bit.
Code:
model small
.stack 100h
.data
s DB “hello,how are you ? $” ; khai báo xâu kí tự cần in
.code
mov AX,@data ; lấy địa chỉ data segment ghi vào DS
mov DS,AX ; Vì model small, đây cũng là địa chỉ
; segment của xâu s
; xuất chuỗi
mov DX, OFFSET s ; lấy địa chỉ offset ghi vào DX
mov AH , 9
int 21h ; gọi hàm 9, ngắt 21h để in
mov AH, 4Ch ; Thoát khỏi chương trình
int 21h
end
Về cơ bản thì 2 chương trình trên không khác nhau vì nó chỉ thực hiện có mỗi việc là in ra dòng chữ "hello,how are you ?" lên cửa sổ console nhưng vì nó được viết cho 2 trình dịch khác nhau nên có thể có chút thay đổi trong mã cũng là chuyện bình thường. Thân |
|
Không có nghề gì trong xã hội là thấp hèn cả - chỉ có nhân cách mới phân biệt thấp cao |
|
|
|
[Question] Re: được viết bằng ASm nhưng sao nó lại khác nhau |
26/11/2007 11:42:05 (+0700) | #7 | 100163 |
|
kegiaumat055
Member
|
0 |
|
|
Joined: 28/06/2007 22:19:18
Messages: 25
Offline
|
|
.Em có sách" Kĩ thuật vi xử lí và lập trình ASSEMBLY cho hệ vi xử lí" của Đỗ Xuân Tiến và sách điện tử "Tra cứu ASM" bày làm theo cách 1.Nhưng "cấu trúc máy tính & ASM" và "Giao trinh hop ngu - Assembly" thì bày làm cách 2 .Vậy cách nào là tốt nhất.Xin các anh giúp đỡ nhiều |
|
|
|
|
[Question] Re: được viết bằng ASm nhưng sao nó lại khác nhau |
26/11/2007 12:42:41 (+0700) | #8 | 100182 |
|
tmd
Member
|
0 |
|
|
Joined: 28/06/2006 03:39:48
Messages: 2951
Offline
|
|
Nhớ lại thuở xưa một chút.
Trong 2 cái đoạn code đó, phân biệt rõ ràng nhất là cách thức sử dụng ngắt. Hai đoạn code đó đều có thể compile, đoạn trên thành .com , đoạn dưới thành .exe .
Một cái chỉ sử dụng có 64k bytes bộ nhớ , loại này là .com, sử dụng ngắt 20h. Loại kia sử dụng nhiều hơn 64k bytes bộ nhớ, loại này là .exe , sử dụng ngắt 21h. Nói cụt ngủn vậy hơi khó hiểu. Bạn tìm hiểu sự khác biệt giữa .com và .exe sẽ hiểu.
Bạn nên tìm hiểu sơ về các đời cpu intel, tập lệnh đi theo các đời đó, cách thức quản lý bộ nhớ, cách dùng ngắt qua các đời, bộ thanh ghi qua các đời. Học assembly mệt dữ lắm.
Hồi đi học, môn này là môn sát thủ.
Cái code đó từ trang này của microsoft đây
How to Use Int 20h to Terminate an .EXE Program
http://support.microsoft.com/kb/72848 |
|
3 giai đoạn của con... người, ban đầu dek biết gì thì phải thăm dò, sau đó biết rồi thì phải thân thiết, sau cùng khi quá thân thiết rồi thì phải tình thương mến thương. Nhưng mà không thương được thì ... |
|
|
|
[Question] Re: được viết bằng ASm nhưng sao nó lại khác nhau |
26/11/2007 23:53:16 (+0700) | #9 | 100274 |
|
kegiaumat055
Member
|
0 |
|
|
Joined: 28/06/2007 22:19:18
Messages: 25
Offline
|
|
Nhớ lại thuở xưa một chút.
Trong 2 cái đoạn code đó, phân biệt rõ ràng nhất là cách thức sử dụng ngắt. Hai đoạn code đó đều có thể compile, đoạn trên thành .com , đoạn dưới thành .exe .
Một cái chỉ sử dụng có 64k bytes bộ nhớ , loại này là .com, sử dụng ngắt 20h. Loại kia sử dụng nhiều hơn 64k bytes bộ nhớ, loại này là .exe , sử dụng ngắt 21h. Nói cụt ngủn vậy hơi khó hiểu. Bạn tìm hiểu sự khác biệt giữa .com và .exe sẽ hiểu.
Bạn nên tìm hiểu sơ về các đời cpu intel, tập lệnh đi theo các đời đó, cách thức quản lý bộ nhớ, cách dùng ngắt qua các đời, bộ thanh ghi qua các đời. Học assembly mệt dữ lắm.
Hồi đi học, môn này là môn sát thủ.
Cái code đó từ trang này của microsoft đây
How to Use Int 20h to Terminate an .EXE Program
http://support.microsoft.com/kb/72848
Ý em muốn hỏi là dùng cái nào là tốt nhất |
|
|
|
|
[Question] Re: được viết bằng ASm nhưng sao nó lại khác nhau |
27/11/2007 08:18:27 (+0700) | #10 | 100417 |
|
kegiaumat055
Member
|
0 |
|
|
Joined: 28/06/2007 22:19:18
Messages: 25
Offline
|
|
Chẳng lẽ hvaonline.net không có ai là nhân tài về ASM sao.Có một câu hỏi cỏn con của em cũng không trả lời đựoc |
|
|
|
|
[Question] Re: được viết bằng ASm nhưng sao nó lại khác nhau |
27/11/2007 08:59:47 (+0700) | #11 | 100428 |
|
rename
Member
|
0 |
|
|
Joined: 28/06/2006 23:02:03
Messages: 32
Location: [color=red]i[/color]
Offline
|
|
Cái nào viết gọn hơn, ít byte hơn thì tốt hơn, thế thôi |
|
|
|
|
[Question] Re: được viết bằng ASm nhưng sao nó lại khác nhau |
27/11/2007 12:26:27 (+0700) | #12 | 100473 |
|
tmd
Member
|
0 |
|
|
Joined: 28/06/2006 03:39:48
Messages: 2951
Offline
|
|
Nếu bạn học cái môn này, chỉ để cho qua, học cho vui, thì bạn muốn dùng cái kiểu code nào cũng được hết, tùy bạn suy nghỉ lấy. Còn bạn học cho biết để sau này sử dụng lại nó, bạn tìm hiểu mấy thứ tui nói đó. Học mà không tự suy nghỉ được, chịu chết đó bạn. Môn này không chịu tìm hiểu, là chẳng biết thứ gì đâu. |
|
3 giai đoạn của con... người, ban đầu dek biết gì thì phải thăm dò, sau đó biết rồi thì phải thân thiết, sau cùng khi quá thân thiết rồi thì phải tình thương mến thương. Nhưng mà không thương được thì ... |
|
|
|
[Question] Re: được viết bằng ASm nhưng sao nó lại khác nhau |
27/11/2007 14:13:43 (+0700) | #13 | 100517 |
|
hakuso
HVA Friend
|
Joined: 04/01/2004 13:28:06
Messages: 287
Location: làng Đo Đo
Offline
|
|
kegiaumat055 wrote:
Ý em muốn hỏi là dùng cái nào là tốt nhất
Như thế nào là "tốt" ?
kegiaumat055 wrote:
Chẳng lẽ hvaonline.net không có ai là nhân tài về ASM sao.Có một câu hỏi cỏn con của em cũng không trả lời đựoc
Phải là nhân tài trong HVA này mới có thể trả lời được câu hỏi này !! Vậy thì HVA không có "nhân tài" rồi
|
|
Live, fight, work and study |
|
|
|
[Question] Re: được viết bằng ASm nhưng sao nó lại khác nhau |
04/12/2007 18:49:14 (+0700) | #14 | 101856 |
|
_BlacK_EyE_
Member
|
0 |
|
|
Joined: 04/12/2007 05:47:44
Messages: 36
Offline
|
|
Cần phải nói ngay là : nên dùng cái thứ nhất.
Lý do: dung lượng rất khác nhau. Nếu bạn dịch thành công 2 đoạn code trên thì sẽ nhận được 2 chương trình khác nhau.
Cái đầu tiên sẽ dịch ra một chương trình COM , là một DOS-Application ( giống như NC vậy ). Còn cái thứ hai sẽ tạo ra một file EXE cho window. Và bạn hãy so sánh dung lượng của cả hai sẽ thấy ngay. Thân. |
|
|
|
|
[Question] được viết bằng ASm nhưng sao nó lại khác nhau |
05/12/2007 07:01:16 (+0700) | #15 | 101980 |
mfeng
Researcher
|
Joined: 29/10/2004 15:16:29
Messages: 243
Offline
|
|
kegiaumat055 wrote:
Anh ơi cho em hỏi 2 chương trình Hello.asm này đều được viết bằng ASm nhưng sao nó lại khác nhau.Anh có thể giải thích được không và chọn cách viết nào là tốt nhất
Đây là hello.asm thứ nhất:
Code:
Code SEGMENT
ASSUME CS:Code,DS:Code
ORG 100h
Begin
MOV AH,09h
MOV DX,Offset String
Int 20h
String DB ' hello,how are you ? $ '
Code Ends
END Begin
Đây là hello.asm thứ hai:
Code:
.model small
.stack 100h
.data
s DB “hello,how are you ? $” ; khai báo xâu kí tự cần in
.code
mov AX,@data ; lấy địa chỉ data segment ghi vào DS
mov DS,AX ; Vì model small, đây cũng là địa chỉ
; segment của xâu s
; xuất chuỗi
mov DX, OFFSET s ; lấy địa chỉ offset ghi vào DX
mov AH , 9
int 21h ; gọi hàm 9, ngắt 21h để in
mov AH, 4Ch ; Thoát khỏi chương trình
int 21h
end
Khác nhau về cấu trúc của hai đoạn code trên vì chúng sử dụng các mô hình bộ nhớ khác nhau:
- Đoạn code 1 dùng mô hình tiny, cả code & data thuộc một segment (64KB). Mô hình này dịch ra được file .COM trong DOS. Mã sinh ra của file COM thường nhỏ, do không cần exe header như file EXE.
- Đoạn code 2 dùng mô hình small, code & data riêng ở 2 segment khác nhau. Mô hình này dịch ra file exe.
Chú ý là chương trình dùng mô hình tiny bị giới hạn bởi kích thước (64KB), nên thường sử dụng khi viết chương trình nhỏ. Mô hình thứ 2 cho phép viết chương trình kích thước lớn hơn. Cả hai đoạn code trên đều viết cho assembly compiler trên DOS (hoặc DOS ảo), không thể sinh ra file exe thực sự chạy trên WIndows. Muốn viết chương trình bằng asm for Win, cần phải dùng Asm compiler cho Windows. cấu trúc file code Asm viết trên Win về cơ bản khác trên DOS.
PS: Đoạn code thứ nhất quên lời gọi Int 21h để in ra chuỗi ký tự |
|
|
|
|
|
|
|
Users currently in here |
1 Anonymous
|
|
Powered by JForum - Extended by HVAOnline
hvaonline.net | hvaforum.net | hvazone.net | hvanews.net | vnhacker.org
1999 - 2013 ©
v2012|0504|218|
|
|