《電子技術應用》
您所在的位置:首頁 > 嵌入式技术 > 解决方案 > 汇编源代码之简单密码输入

汇编源代码之简单密码输入

2017-07-23
關鍵詞: 汇编语言

title***簡單密碼輸入 by lluct***
datasegment ;定義數據段
input  db   100 dup (?)
;定義輸入的字符串,字符串必須用db定義,長度為100個字節(jié)
cmpare db   '5201314','$'
;定義密碼
msg1  db   'PASSWORD RIGHT!','$'
;定義輸入密碼正確后顯示出來的信息
msg2  db   'PASSWORD ERROR!','$'
;定義輸入密碼錯誤后顯示出來的信息
headmsg db   'ENTER YOUR PASSWORD:','$'
;頭信息
dataends ;數據段結尾
  codesegment ;定義代碼段
assumecs:code ;規(guī)定cs的內容
assumeds:data ;規(guī)定ds的內容
  start:movax,data ;程序從start開始
movds,ax ;ds置初值,data的段地址
movsi,0 ;變址寄存器置初值0
  call  enter ;調用顯示回車換行子程序
    lea   dx,headmsg;輸出頭信息字符串的偏移地址
    call  dispchs ;調用顯示字符串子程序
repeat:movah,01h 
;定義repeat標號,用于循環(huán)輸入單個字符.調用1號功能:從鍵盤輸入一個字符并回顯
int21h ;完成輸入回顯
    cmp   al,0dh ;輸入的字符和cr(回車)比較
jefinish ;如果等于回車就轉移到finish
movinput[si],al;把al的置傳送到input的si地址中(好像是這樣吧)
incsi ;si加1
jmprepeat ;無條件轉移到repeat
finish:movinput[si],24h;給輸入完成的字符串加上結束標志($)
callenter
  mov   si,0 ;源變址寄存器置初值0
    mov   di,0 ;目的變址寄存器置初值0
    mov   cx,8 ;設置密碼檢查位數(結束標志也要算進去)
check: cmp   cx,0 ;置位數為0.
    je   right ;如果密碼檢查完成,轉移到right
    mov   bl,input[si];把input的si地址中的數據傳送到bl
    mov   dl,cmpare[di];把cmpare的di地址中的數據傳送到dl
    cmp   dl,bl ;dl和bl比較
    jne   error ;如果不相等,就轉移到error
    inc   si ;si加1
    inc   di ;di加1
    dec   cx ;cx減1
    jmp   check ;無條件轉移到check
  right: call  enter
    lea   dx,msg1 
    call  dispchs
    call  enter
    jmp   exit
  error: call  enter
    lea   dx,msg2
    call  dispchs
    mov   dl,07h ;輸出ascii碼的報警(響鈴)控制符bel(07h)
    call  dispch
    call  enter
    jmp   exit
exit:movah,4ch ;4c號功能調用:終止當前程序并返回
int21h ;返回dos
  enterprocnear ;顯示回車換行子程序
movdl,0dh ;輸出ascii碼的回車控制符cr(odh)
calldispch
movdl,0ah ;輸出ascii碼的換行控制符lf(0ah)
calldispch
ret ;返回
enterendp ;子程序結尾
  dispchprocnear ;顯示單個字符子程序
movah,02h ;2號功能調用:顯示器輸出字符
int21h ;完成輸出顯示
ret
dispchendp
  dispchsprocnear ;顯示字符串子程序
movah,09h ;9號功能調用:顯示字符串
int21h ;完成輸出顯示
ret
dispchsendp
  codeends ;代碼段結尾
endstart ;結束匯編
  ;把以上代碼復制到記事本等文本程序中,并保存.(如passwrod.asm)
;編譯:masm password.asm
;連接:link password.obj
;執(zhí)行:password.exe
  =================================================================
  帶星號的密碼輸入
title***簡單密碼輸入進階 by lluct***
  datasegment ;定義數據段
headmsg db   ' ',0dh,0ah
db'+----------------------------------------------+',0dh,0ah
db'| Simple input password system for asm program |',0dh,0ah
db'|        have a fun.^-^.        |',0dh,0ah
db'| Poor Programmer:lluct   Date:march,21 2004 |',0dh,0ah
db'+----------------------------------------------+',0dh,0ah
    db   0dh,0ah,'PLEASE INPUT PASSWORD:','$'
;定義頭信息組
msg1db'PASSWORD RIGHT!','$'
;定義輸入密碼正確后顯示出來的信息
msg2db'PASSWORD ERROR!','$'
;定義輸入密碼錯誤后顯示出來的信息
cmparedb'5201314','$'
;定義密碼
inputdb100 dup (?)
;定義輸入的字符串,字符串必須用db定義,長度為100個字節(jié)
dataends ;數據段結尾
  codesegment ;定義代碼段
assumecs:code ;規(guī)定cs的內容
assumeds:data ;規(guī)定ds的內容
  start_program: ;程序從這里開始
movax,data ;把data段地址賦給ax
movds,ax ;ds置初值,data的段地址
movsi,0 ;變址寄存器初值為0
  callenter ;調用顯示回車換行子程序
    lea   dx,headmsg;輸出頭信息組的偏移地址
calldispchs ;調用顯示字符串子程序
  repeat_input: ;循環(huán)輸入單個字符
movah,08h ;調用8號功能:鍵盤輸入字符(無回顯)
int21h ;完成輸入
    mov   dl,2ah ;輸出ascii碼的*號
    push  ax ;保護原來輸入的字符
    calldispch ;調用單個字符回顯子程序
    pop   ax ;恢復原來輸入的字符
    cmpal,0dh ;是否回車
jefinished_input;是就轉移到finished_input
movinput[si],al;保存單個字符
incsi ;訪問下一個相對地址
jmprepeat_input;無條件轉移到repeat_input
  finished_input: ;完成輸出
movinput[si],24h;給剛才輸入的字符串加結束標志($)
callenter
  movsi,0 ;si置0
movdi,0 ;di置0
movcx,8 ;設置檢測密碼的長度,要包括結束標志
check_password: ;檢測密碼
cmpcx,0 ;cx為是否為0
jeright ;是就轉移到right
movbl,input[si];把input的si的地址內的信息傳送到bl
movdl,cmpare[di];把cmpare的di的地址內的信息傳送到dl
cmpdl,bl ;檢查dl和bl是否一樣
jneerror ;不是就轉移到error
incsi ;si加1
incdi ;di加1
deccx ;cx減1
jmpcheck_password
  right:
call enter
leadx,msg1
calldispchs
callenter
jmpexit
  error:
callenter
leadx,msg2
calldispchs
movdl,07h ;輸出ascii碼的報警(響鈴)控制符bel(07h)
    call  dispch
callenter
jmpexit
  exit:  mov   ah,4ch ;4c號功能調用:終止當前程序并返回
int21h ;返回dos
  enterprocnear ;顯示回車換行子程序
movdl,0dh ;輸出ascii碼的回車控制符cr
calldispch
movdl,0ah ;輸出ascii碼的換行控制符lf
calldispch
ret ;返回
enterendp
  dispchprocnear ;顯示單個字符子程序
    mov   ah,02h ;2號功能調用:顯示器輸出字符
int21h ;完成輸出顯示
    ret
dispchendp
  dispchsprocnear ;顯示字符串子程序
movah,09h ;9號功能調用:顯示字符串
int21h
ret
dispchsendp
  codeends ;代碼段結尾
    end   start_program;結束匯編
;把以上代碼復制到記事本等文本程序中,并保存.(如passwd2.asm)
;編譯:masm passwd2.asm
;連接:link passwd2.obj
;執(zhí)行:passwd2.exe

本站內容除特別聲明的原創(chuàng)文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創(chuàng)文章及圖片等內容無法一一聯(lián)系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
主站蜘蛛池模板: 国产一区玩具在线观看| 欧美亚洲国产成人| 国产精品美女av| 欧美中文字幕在线| 青青青在线观看视频| 午夜精品一区二区三区在线播放| 日本午夜在线亚洲.国产| 深夜福利一区二区| 国产精品免费成人| 精品欧美日韩在线| 日韩av免费一区| 丁香六月激情婷婷| 久久久久久久久久久久av| 五月天综合网| 婷婷亚洲婷婷综合色香五月| 激情六月丁香婷婷| 日韩中文在线视频| 久久av免费一区| 不卡av在线网站| 一区二区不卡视频| 中文字幕一区二区三区最新| 日韩在线免费视频观看| 日韩av成人在线| 国模吧一区二区| 亚洲综合成人婷婷小说| 国产在线观看福利| 国产精品美女免费视频| 久久精品午夜一区二区福利| 91精品中文在线| 国产欧亚日韩视频| 久久久久免费视频| 日本在线高清视频一区| 91免费视频国产| 97成人精品视频在线观看| 一区二区三区在线视频看| 久久中文字幕国产| 中文字幕日韩精品久久| 久久久精品影院| 久久国产精品久久久久久| 日韩精品 欧美| 亚洲永久免费观看|