This demonstrates a simple “Hello World” style program for 16-bit (DOS) x86 assembly using Microsoft’s free MASM assembler.
-
.model small
-
.stack
-
.data
-
Message db "Press Y or N:$" ;Prompt for user
-
Uyes db "You pressed Y!$" ;Pressed y
-
Uno db "You pressed N!$" ;Pressed n
-
-
;how to do assembly:
-
;download masm32
-
;download link563.exe (extracts link.exe)
-
;replace c:\masm32\bin\link.exe with THAT link.exe
-
; use ml /c /coff blah.asm
-
; then link blah.obj
-
; when it asks you for blah.exe just keep hitting enter.
-
-
-
.code
-
_start:
-
mov ax,03h ;clears screen (function 3h)
-
int 10h ;interrupt 10h
-
-
mov ax, SEG Message ;put segment of message into AX
-
mov ds, ax ;put this into DS
-
mov dx, OFFSET Message ;put offset of message into AX
-
mov ah,09h ;Function 9h of
-
int 21h ;Interrupt 21h
-
-
mov ah,01h ;function 01h of int21h,
-
int 21h ;get char from keyboard
-
-
cmp al, "Y" ;if ah Y then
-
je Yes ;Goto Yes label
-
-
cmp al, "N" ;if ah N then
-
je No ;Goto No Label
-
jne _start ;if not Y or N then goto start
-
-
Yes:
-
mov ax,03h ;clears screen (function 3h)
-
int 10h ;interrupt 10h
-
-
mov ax, SEG Uyes ;segment of Uyes
-
mov ds, ax ;put segment into DS
-
mov dx, OFFSET Uyes ;put offset of Uyes into DX
-
mov ah,09h ;function 9h print string at DS:DX
-
int 21h ;call interrupt 21h
-
jmp close
-
-
No:
-
mov ax,03h ;clears screen (function 3h)
-
int 10h ;interrupt 10h
-
-
mov ax, SEG Uno ;segment of Uno
-
mov ds, ax ;put segment into DS
-
mov dx, OFFSET Uno ;put offset of Uno into DX
-
mov ah,09h ;function 9h print string at DS:DX
-
int 21h ;call interrupt 21h
-
jmp close
-
-
close:
-
mov ax,4c00h ;put 4c00h into ax, closing back to DOS
-
int 21h ;INT 21h, return to DOS
-
-
end _start