Untitled

 avatar
unknown
plain_text
10 months ago
3.5 kB
5
Indexable
; «« Comment begins with ';' to the end of a line
; From masm32\tutorial\console\demo1
;
; Build this with the "Project" menu using
; "Console Assemble and Link"
; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««
.486                         ; tạo mã 32-bit
.model flat, stdcall         ; mô hình bộ nhớ 32-bit
option casemap :none         ; phân biệt chữ hoa và chữ thường
include \masm32\include\windows.inc ; luôn là dòng đầu tiên
include \masm32\macros\macros.asm   ; hỗ trợ macro của MASM
; -----------------------------------------------------------------
; bao gồm các tệp có định dạng MASM cho các lời gọi hàm
; -----------------------------------------------------------------
include \masm32\include\masm32.inc
include \masm32\include\gdi32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
; ------------------------------------------------
; các tệp thư viện có định nghĩa cho các hàm xuất khẩu
; và mã đã được kiểm tra tin cậy
; ------------------------------------------------
includelib \masm32\lib\masm32.lib
includelib \masm32\lib\gdi32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
v1 dd 10             ; Khai báo giá trị v1
v2 dd 20             ; Khai báo giá trị v2
v3 dd 30             ; Khai báo giá trị v3
max dd 0             ; Biến lưu trữ giá trị lớn nhất
avg dd 0             ; Biến lưu trữ giá trị trung bình
outputMax db "Maximum value: ", 0
outputAvg db "Average value: ", 0
buffer db 11 dup(?)  ; Bộ đệm cho việc chuyển đổi số sang chuỗi

.code                        ; báo cho MASM biết phần mã bắt đầu từ đâu
start:                       ; điểm bắt đầu của chương trình

; Load values into registers
mov eax, v1          ; Load value of v1 into register EAX
mov ebx, v2          ; Load value of v2 into register EBX
mov ecx, v3          ; Load value of v3 into register ECX

; Finding the maximum value
mov edx, eax         ; Copy v1 into EDX
cmp edx, ebx         ; Compare EDX with EBX
jl  L1               ; Jump to L1 if EDX < EBX
mov edx, ebx         ; EDX = EBX if EDX >= EBX
L1:
cmp edx, ecx         ; Compare EDX with ECX
jl  L2               ; Jump to L2 if EDX < ECX
mov edx, ecx         ; EDX = ECX if EDX >= ECX
L2:
mov max, edx         ; Store the maximum value in memory location 'max'

; Calculate the sum
add eax, ebx         ; EAX = EAX + EBX
add eax, ecx         ; EAX = EAX + ECX

; Calculate the average
mov ebx, 3           ; Move 3 into EBX
div ebx              ; EAX = EAX / 3

mov avg, eax         ; Store the average value in memory location 'avg'

; Print the results
invoke StdOut, addr outputMax ; In ra "Maximum value: "
invoke dwtoa, max, addr buffer ; Chuyển giá trị max sang chuỗi
invoke StdOut, addr buffer    ; In ra giá trị lớn nhất

invoke StdOut, addr outputAvg ; In ra "Average value: "
invoke dwtoa, avg, addr buffer ; Chuyển giá trị avg sang chuỗi
invoke StdOut, addr buffer    ; In ra giá trị trung bình

invoke ExitProcess, 0         ; Thoát khỏi chương trình

; -------------------------------
end start                      ; báo cho MASM biết chương trình kết thúc ở đâu
Editor is loading...
Leave a Comment