主题:初学汇编,发个Hello程序意思意思。多多指教
MyMacro.inc
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
clrscr macro
pusha
mov ax, 0600h ;ah=06h: clear the text in screen
mov cx, 0000h ;top left corner: (row, line)=(ch, cl)=(0,0)
mov dx, 184fh ;bottom right corner:(row,line)=(dh,ch)=(18h,4fh)=(24,79)
mov bh, 07h ;bh=70h, white words in black background
int 10h
mov ah, 02h ;set the location of cursor
mov bh, 00h ;the page number
mov dx, 0000h ;location of cursor (row,line)=(dh,dl)=(0,0)
int 10h
popa
endm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
putstr macro string
push ax
push dx
lea ax, string
mov dx, ax
mov ah, 09h
int 21h
pop dx
pop ax
endm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; this macro will change the ax register
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
getchar macro arg
mov ah, 01h
int 21h
mov arg, al
endm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
putchar macro arg
push ax
push dx
mov ah, 02h
mov dl, arg
int 21h
pop dx
pop ax
endm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
newline macro
push ax
push dx
mov ah, 02h
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
pop dx
pop ax
endm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
quit macro
mov ah, 4ch
int 21h
endm
Hello.asm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
include MyMacro.inc
data segment
message1 db 'Hello. Welcome to the world of assemble language.$'
message2 db 'Please input a char: $'
message3 db 'The char you input is: $'
message4 db 'Press any key to quit...$'
data ends
stack segment stack
db 128 dup(?)
stack ends
code segment
assume ds:data, cs:code, ss:stack
start:
mov ax, data
mov ds, ax
clrscr
putstr message1
newline
putstr message2
getchar al
newline
putstr message3
putchar al
newline
putstr message4
getchar al
quit
code ends
end start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
clrscr macro
pusha
mov ax, 0600h ;ah=06h: clear the text in screen
mov cx, 0000h ;top left corner: (row, line)=(ch, cl)=(0,0)
mov dx, 184fh ;bottom right corner:(row,line)=(dh,ch)=(18h,4fh)=(24,79)
mov bh, 07h ;bh=70h, white words in black background
int 10h
mov ah, 02h ;set the location of cursor
mov bh, 00h ;the page number
mov dx, 0000h ;location of cursor (row,line)=(dh,dl)=(0,0)
int 10h
popa
endm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
putstr macro string
push ax
push dx
lea ax, string
mov dx, ax
mov ah, 09h
int 21h
pop dx
pop ax
endm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; this macro will change the ax register
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
getchar macro arg
mov ah, 01h
int 21h
mov arg, al
endm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
putchar macro arg
push ax
push dx
mov ah, 02h
mov dl, arg
int 21h
pop dx
pop ax
endm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
newline macro
push ax
push dx
mov ah, 02h
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
pop dx
pop ax
endm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
quit macro
mov ah, 4ch
int 21h
endm
Hello.asm
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
include MyMacro.inc
data segment
message1 db 'Hello. Welcome to the world of assemble language.$'
message2 db 'Please input a char: $'
message3 db 'The char you input is: $'
message4 db 'Press any key to quit...$'
data ends
stack segment stack
db 128 dup(?)
stack ends
code segment
assume ds:data, cs:code, ss:stack
start:
mov ax, data
mov ds, ax
clrscr
putstr message1
newline
putstr message2
getchar al
newline
putstr message3
putchar al
newline
putstr message4
getchar al
quit
code ends
end start