南京郵電大學彙編 實驗二 使用者登陸驗證程式的設計

2021-10-25 01:11:37 字數 3827 閱讀 4460

執行結果

從buf單元開始存有一字串(長度<255),程式設計實現統計該字串中的ascii在42h~45h之間的字元個數,並將統計結果以二進位制形式顯示在螢幕。

程式執行後,給出提示操作,請使用者鍵入使用者名稱和密碼;使用者在鍵入密碼時,程式不回顯鍵入字元;只有當使用者鍵入的使用者名稱,密碼字串和程式內定的字串相同時,顯示歡迎介面並返回dos;否則給出提示資訊,使用者名稱或密碼錯誤,再次輸入。介面顏色自定(彩色或黑白)

本來是想用rdrand指令來寫一段隨機數生成**的,但是發現rdrand這個指令是在inter於ivy bridge微架構(2023年生產)後才定義到ia32架構中的,目前我們的電腦上基本上都支援這個指令,但是經過嘗試之後發現即使採用直接寫位元組碼dosbox也不支援這個指令,可能有以下兩個原因:

dosbox的虛擬化環境採用了模擬而不是虛擬,這導致了只支援實模式下的指令集;

這個指令只能在保護模式下使用

.586p

data segment use16

count_number db 0

string_1 db 'abcdefg',0

data ends

code segment use16

assume cs: code, ds: data

beg:

mov ax,data

mov ds,ax

mov di,offset string_1

;得到在範圍內的數

get_count:

mov al,ds:[di]

cmp al,0

jz print_result

cmp al,42h

jb .1

cmp al,45h

ja .1

inc count_number

.1:

inc di

jmp get_count

;得到在範圍內的數

;列印資料

print_result:

mov bl,count_number

mov cx,8

.2:mov dl,0

shl bl,1

adc dl,30h

mov ah,2

int 21h

loop .2

mov dl,'h'

int 21h

;列印資料

mov ah,4ch

int 21h

code ends

end beg

.586p

data segment use16

;定義資料接受區

username db 100 dup(0)

username_recived_number dw 0

password db 100 dup(0)

password_recived_number dw 0

;定義資料接受區

username_origin db 'yourusername',0

password_origin db 'yourpassword',0

string_tip db 'please enter your username!',0ah,0dh,'$'

string_password_tip db 'please enter your password!',0ah,0dh,'$'

string_wrong_tip db 'wrong username or password!\n',0ah,0dh,'$'

string_hello_tip db 'you got it!',0ah,0dh,'$'

data ends

code segment use16

assume cs: code, ds: data

beg:

mov ax,data

mov ds,ax

mov dx,offset string_tip

mov ah,9

int 21h

mov username_recived_number,0

getusername:

mov ah,1

int 21h

mov di,offset username

add di,username_recived_number

mov ds:[di],al

inc username_recived_number

cmp al,0dh;當輸入回車時實際上是輸入了0x0a,0x0d兩個字元,此時系統呼叫實際上返回的是最後乙個字元0x0d

jnz getusername

mov di,offset username

add di,username_recived_number

sub di,1

mov [di],0

mov dx,offset string_password_tip

mov ah,9

int 21h

mov password_recived_number,0

getpassword:

mov ah,8

int 21h

mov di,offset password

add di,password_recived_number

mov ds:[di],al

inc password_recived_number

cmp al,0dh;當輸入回車時實際上是輸入了0x0a,0x0d兩個字元,此時系統呼叫實際上返回的是最後乙個字元0x0d

jnz getpassword

mov di,offset password

add di,password_recived_number

sub di,1;將最後乙個輸入的0x0d字元刪去

mov [di],0

cld;當df位為0時,採用大端方式

mov ax,ds

mov es,ax

checkusername:

mov si,offset username_origin

mov di,offset username

mov cx,username_recived_number

repe cmpsb;採用串比較,源位址為ds:si,目的位址為es:di

jnz wrong

checkpassword:

mov si,offset password_origin

mov di,offset password

mov cx,password_recived_number

repe cmpsb

jnz wrong

mov dx,offset string_hello_tip

mov ah,9

int 21h

mov ah,4ch

int 21h

wrong:

mov dx,offset string_wrong_tip

mov ah,9

int 21h

jmp beg

code ends

end beg

實際上這兩個題目都比較簡單,實際上編寫的時候只需要注意一下系統呼叫之後的引數改變就好了。

其中第二個源**由於比較懶…有以下缺陷:

第乙個題目:

第二個題目:

南京郵電大學密碼學之md5

首先看一下題目 python 好!這裡有一段丟失的md5密文 e9032?da?08?911513?0?a2 要求你還原出他並且加上nctf 提交 已知線索 明文為 tasc?o3rjmv?wdjkx?zm 意思很簡單就是根據明文匹配密文,但是明文不完整需要遍歷字母表和數字進行爆破 這裡用簡單的py...

重慶郵電大學CSDN每週會議文案

本週重慶郵電大學csdn協會召開了每週一次的會議,會議內容如下 一 為了貫徹學校社團聯合會 關於社團成員會費收取的決定 本協會定於10月24日至25日收取各部門新成員會費,每位新成員按照學校標準繳納20元會費,希望各部門在規定時間內完成繳費的相關事宜 二 為了加強協會管理,協會將向成員收取5元的工作...

2023年北京郵電大學機試題目

趁著現在還記得趕快寫下來,個人回憶版 計算機學院機試題目 第一題 題目描述 輸入32位的二進位制01串,輸出這個數 1和 3後的32位二進位制串 輸入描述 先輸入t,表示輸入的組數 然後輸入t行二進位制串 輸出描述 輸出 1和 3後的二進位制串 輸入樣例 2000000000000000000000...