程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 匯編語言 >> “HELLO,WORLD”進階匯編程序系列

“HELLO,WORLD”進階匯編程序系列

編輯:匯編語言

TITLE ***HELLO,WORLD進階程序之選擇分支 BY LLUCT***

DATA SEGMENT ;定義數據段

MSG1 DB '***WELCOME TO MY PROGRAM BY LLUCT***','$'

;定義輸出的第一個字符串信息,字符串必須用DB定義,$為結束標志

MSG2 DB '1:BASIC MESSAGE 2:ADVANCED MESSAGE','$'

;定義輸出的字符串信息:選擇菜單

MSG3 DB 'PLEASE CHOOSE:','$'

;定義輸出的字符串信息:選擇前綴

MSG4 DB 'HELLO,WORLD!^-^','$'

;定義輸出的字符串信息:分支1的信息

MSG5 DB 'THIS IS MY FIRST ASM_86 PROGRAM! @^-^@','$'

;定義輸出的字符串信息:分支2的信息

ERRMSG DB 'CHOOSE ERROR! -_-b','$'

;定義輸出的字符串信息:選擇錯誤信息

DATA ENDS ;數據段結尾

CODE SEGMENT ;定義代碼段

ASSUME CS:CODE ;規定CS的內容

ASSUME DS:DATA ;規定DS的內容

START: MOV AX,DATA ;程序從START開始

MOV DS,AX ;DS置初值,DATA的段地址

CALL ENTER ;調用顯示回車換行子程序

LEA DX,MSG1 ;輸出第一個字符串的偏移地址

CALL DISPCHS ;調用顯示字符串子程序

CALL ENTER ;調用顯示回車換行子程序

CALL ENTER ;這個...同上啊^-^

LEA DX,MSG2 ;輸出第二個字符串的偏移地址

CALL DISPCHS ;調用顯示字符串子程序

AGAIN: CALL ENTER ;定義AGAIN標號.用於選擇錯誤循環

LEA DX,MSG3 ;輸出第三個字符串的偏移地址

CALL DISPCHS ;調用顯示字符串子程序

MOV AH,01H ;調用1號功能:從鍵盤輸入一個字符並回顯

INT 21H ;完成輸入回顯

CMP AL,'1' ;輸入的字符和1相比較

JE BASICP ;如果相等,轉移到BASICP標號(JE=Jump if Equal)

CMP AL,'2' ;輸入的字符和2相比較 ||

JE ADVANP ;如果相等,轉移到ADVANP標號(JE=如果相等就轉移)

JMP ERROR ;否則就無條件轉移到ERROR標號

EXIT: MOV AH,4CH ;4C號功能調用:終止當前程序並返回調用程序

INT 21H ;返回DOS

BASICP: CALL ENTER ;什麼,還要解釋啊.暈-_-!!!

LEA DX,MSG4 ;輸出第三個字符串的偏移地址

CALL DISPCHS ;調用顯示字符串子程序

CALL ENTER ;..........

JMP EXIT ;無條件轉移到EXIT標號

ADVANP: CALL ENTER ;55555555

LEA DX,MSG5 ;解釋了四次,應該懂了吧

CALL DISPCHS ;調用顯示字符串子程序

CALL ENTER ;再問就死給你看

JMP EXIT ;無條件轉移到EXIT標號

ERROR: CALL ENTER

LEA DX,ERRMSG ;輸出選擇錯誤信息

CALL DISPCHS ;調用顯示字符串子程序

MOV DL,07H ;輸出ASCII碼的報警(響鈴)控制符BEL(07H)

CALL DISPCH ;調用顯示單個字符子程序

CALL ENTER

JMP AGAIN

DISPCH PROC NEAR

;顯示單個字符子程序,NEAR說明子程序和主程序在同一個代碼段中(現無主程序調用)

MOV AH,02H ;2號功能調用:顯示器輸出字符

INT 21H ;完成輸出顯示

RET ;返回

DISPCH ENDP ;子程序結尾

ENTER PROC NEAR ;顯示回車換行子程序

MOV DL,0DH ;輸出ASCII碼的回車控制符CR(0DH)

CALL DISPCH ;調用顯示單個字符子程序

MOV DL,0AH ;輸出ASCII碼的換行控制符LF(0AH)

CALL DISPCH ;調用顯示單個字符子程序

RET ;返回

ENTER ENDP ;子程序結尾

DISPCHS PROC NEAR

;顯示字符串子程序,NEAR說明子程序和主程序在同一個代碼段中(現無主程序調用)

MOV AH,09H ;9號功能調用:顯示字符串

INT 21H ;完成輸出顯示

RET

DISPCHS ENDP

CODE ENDS ;代碼段結尾

END START ;結束匯編

;把以上代碼復制到記事本等文本程序中,並保存.(如helloch.asm)

;編譯:masm helloch.asm

;連接:link helloch.obj

;執行:helloch.exe

======================================================

title ***hello,world進階之字符串輸入輸出 by lluct***

data segment ;定義數據段

input db 100 dup(?)

;定義輸入的字符串,字符串必須用db定義,長度為100個字節

msg1 db 'Hello,','$'

;定義輸出的前綴字符串信息,字符串必須用db定義,$為結束標志(24h)

msg2 db ',Welcome to here!','$'

;定義輸出的後綴字符串信息

headmsg db 'PLEASE INPUT YOUR NAME:','$'

;開始顯示的字符串信息

data ends ;數據段結尾

code segment ;定義代碼段

assume cs:code ;規定cs的內容

assume ds:data ;規定ds的內容

start: mov ax,data ;程序從start開始

mov ds,ax ;ds置初值,data的段地址

mov si,0 ;變址寄存器置初值0

call enter ;調用顯示回車換行子程序

lea dx,headmsg ;輸出開始顯示的字符串的偏移地址

call dispchs ;調用顯示字符串子程序

repeat: mov ah,01h

;定義repeat標號,用於循環輸入單個字符.調用1號功能:從鍵盤輸入一個字符並回顯

int 21h ;完成輸入回顯

cmp al,0dh ;輸入的字符和CR(回車)比較

je exit ;如果等於回車就轉移到exit

mov input[si],al ;把al的值傳送到input的si地址中(好像是這樣吧)

inc si ;si加1

jmp repeat ;無條件轉移到repeat

exit: call enter

mov input[si],24h ;給輸入完成的字符串加上結束標志($)

call enter

lea dx,msg1 ;輸出前綴字符串的偏移地址

call dispchs ;調用顯示字符串子程序

lea dx,input ;輸出剛才輸入的字符串

call dispchs

lea dx,msg2

call dispchs

call enter

mov ah,4ch ;4c號功能調用:終止當前程序並返回調用程序

int 21h ;返回dos

enter proc near ;顯示回車換行子程序

mov dl,0dh ;輸出ascii碼的回車控制符cr(0dh)

call dispch

mov dl,0ah ;輸出ascii碼的換行控制符lf(0ah)

call dispch

ret ;返回

enter endp ;子程序結束

dispch proc near

mov ah,02h ;2號功能調用:顯示器輸出字符

int 21h ;完成輸出顯示

ret ;返回

dispch endp

dispchs proc near

mov ah,09h ;9號功能調用:顯示字符串

int 21h ;完成輸出顯示

ret ;返回

dispchs endp

code ends ;代碼段結尾

end start ;結束匯編

;把以上代碼復制到記事本等文本程序中,並保存.(如heinout.c)

;編譯:masm heinout.asm

;連接:link heinout.obj

;執行:heinout.exe

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved