彙編實驗二

2021-08-14 09:15:40 字數 3694 閱讀 4936

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

.486  

data segment use16

buf db 'abcd'

count equ $-buf

data ends

code segment use16

assume cs:code,ds:data

beg:

mov ax,data

mov ds,ax

mov bl,0 ;計數

mov si,0

mov cx,count

aga:

cmp buf[si],42h

jb last ;低於轉移

cmp buf[si],45h

ja last ;高於轉移

inc bl

last:

inc si

loop aga

mov cx,8

m2:

test bl,80h

jnz m3

mov dl,'0'

mov ah,02h

int 21h

jmp m4

m3:

mov dl,'1'

mov ah,02h

int 21h

m4:

shl bl,1

loop m2

mov ah,4ch

int 21h

code ends

end beg

(2)使用者登入驗證程式的實現

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

.486

data  segment   use16

_name  db

name

- 1, '1511','$'

_password  db

password

- 1, '

1212

', '$'

buf_name  db        30db?

db        30 dup(?)

buf_password  db        30db?

db        30 dup(?)

mesg1  db

'please inpute your name: ', '$'

mesg2  db

'please inpute your password: ', '$'

ok  db        0dh, 0ah, '----  wellcome  ---- ', 0dh, 0ah, '$'

no  db        0dh, 0ah, 'username or password error!', 0dh, 0ah, '$'

data  ends

code  segment   use16

assume    cs:code, ds:data

beg:  mov       ax, data

mov       ds, ax

mov       ss, ax

mov       sp, 0

;get name

again:  mov       ah, 9

mov       dx, offset mesg1

int       21h

mov       ah, 0ah

mov       dx, offset buf_name

int       21h

mov       bl, buf_name+1

mov       bh, 0

inc       byte ptr buf_name+1

mov       si, offset buf_name + 2

mov       byte ptr [bx+si], '$'

; line break

mov       ah, 02h

mov       dl, 0ah

int       21h

;get password

mov       ah, 9

mov       dx, offset mesg2

int       21h

mov       di, 0

mov       bx, offset buf_password + 2

s:  mov       ah,08h

int       21h

mov       byte ptr [bx + di], al

inc       di

cmp       al, 0dh

jnz       s

mov       ax, di

mov       byte ptr buf_password + 1, al

mov       byte ptr [bx +di], '$'

call      check

cmp       ax, 0

jz        again

mov       ah, 4ch

int       21h

check  proc

mov       si, offset _name

mov       di, offset buf_name + 1

mov       cx, [si]

mov       ch, 00h

s0:  mov       al, [si]

cmp       al, [di]

jnz       error

inc       si

inc       di

loop      s0

mov       si, offset _password

mov       di, offset buf_password + 1

mov       cx, [si]

mov       ch, 00h

s1:  mov       al, [si]

cmp       al, [di]

jnz       error

inc       si

inc       di

loop      s1

mov       ah, 9

mov       dx, offset ok

int       21h

mov       ax, 1

jmp       over

error:  mov       ah, 9

mov       dx, offset no

int       21h

mov       ax, 0

over:  ret

check  endp

code  ends

end       beg

彙編實驗(二)

test 和 and 區別在於不改變op1 shr 如果要多移幾次 mov cl,4 shr dl,cl 判斷陣列裡正負數 並分開存放 assume cs code,ds data data segment m db 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17...

彙編實驗二

1 使用e命令修改0021 0 0021 f資料,及修改後檢視是否正確寫入的操作 可以看出是正確的。2 使用a命令輸入指令 3 執行命令 將結果填在書上 2.1 使用a命令輸入指令,使用e命令修改2000 0 2000 f的值,及修改後檢視的部分 2 單步除錯每一行彙編指令 第一行 給ax賦值 第三...

彙編實驗二

實驗結論 1 在使用 a 命令輸入指令除錯前,使用 e 命令將記憶體單元0021 0 0021 7連續 8個位元組資料修改為30h,31h,32h,33h,34h,35h,36h,37h 輸入指令 一條一條執行 書上的填空內容為ax 3130 ax 6465 bx 3534 bx 6c6a sp 0...