1.編乙個程式,從鍵盤輸入乙個不長於120個字元的串(回車鍵結束),然後將其中的字母字元顯示輸出(在顯示輸出前,補充輸出回車換行)。
datas segment
buf db 120 dup(?)
datas ends
stacks segment
;此處輸入堆疊段**
stacks ends
codes segment
assume cs:codes,ds:datas,ss:stacks
start:
mov ax,datas
mov ds,ax
mov si,offset buf
ag: mov ah,01h
int21h cmp al,0dh
je exit
mov [si],al
inc si
jmp ag
exit:
mov [si],al
mov ah,02h
mov si,offset buf
ag1:
mov dl,[si]
int21h cmp al,0dh
je exit1
inc si
jmp ag1
exit1:
mov ah,4ch
int21hcodes ends
end start
2.編乙個程式完成從鍵盤上輸入乙個4位的16進製制數,並以八進位制形式顯示出來。
datas segment
num dw 1000h,100h,10h,1h
datas ends
stacks segment
;此處輸入堆疊段**
stacks ends
codes segment
assume cs:codes,ds:datas,ss:stacks
start:
mov ax,datas
mov ds,ax
mov si,offset num
mov cx,4
mov bp,0
input:
mov ah,01h
int21h cmp al,39h
jbe less
sub al,7h
less:
sub al,30h
mov ah,0
mov bx,[si]
mul bx
add bp,ax
add si,2
loop input
rol bp,1
mov dx,bp
and dl,01h
add dl,30h
mov ah,02h
int21h mov cx,5
output:
push cx
mov cl,3
rol bp,cl
mov dx,bp
and dl,07h
add dl,30h
mov ah,02h
int21h pop cx
loop output
mov ah,4ch
int21hcodes ends
end start
3. 在首位址為data的字陣列中,存放了100h個16位無符號數,編乙個子程式,找出其中的最小數,並存入ax暫存器中返回。
4. 已知資料塊buf中存放3個位元組資料,是編寫乙個程式判斷這3個數的關係:如果3個數相等,則顯示「all equal.」;如果有任意兩個數相等,則顯示「only two equal.」;如果三個數各不相同,則顯示「all three different from each other.」。
data segment
buf db 1,2,3 ;三個資料
disp1 db 'all equal$'
disp2 db 'only two equal$'
disp3 db 'all three diffrent from each other$'
data ends
code segment
assume cs:code,ds:data
main proc far
start:mov ax,data
mov ds,ax
mov si,offset buf ;位址指標
mov ax,[si]
cmp ax,[si+2] ;第乙個數比第二個數
jnz l1 ;1,2不相等則跳轉
cmp ax,[si+4] ;接上面,1,2相等的話比較1,3
jnz l2
lea dx,disp1 ;不相等則跳轉,顯示兩個相等
call print1 ;否則全相等,呼叫子程式顯示
jmp quit
l1:cmp ax,[si+4] ;此處是在1,2不相等的條件下比較1,3
jz l2 ;相等的話即有兩個相等跳轉至l2(顯示disp2)
mov ax,[si+2]
cmp ax,[si+4] ;1,3不相等,1,2不相等,比較2,3
jz l2
lea dx,disp3 ;2,3相等的話也是兩個相等,同樣跳轉至l2
call print1 ;否則沒有相等的,呼叫子程式顯示disp3
jmp quit
l2: lea dx,disp2
call print1
quit:mov ax,4c00h
int21hmain endp
;;子程式部分
print1 proc
mov ah,09h
int21h ;呼叫功能顯示都相等
retprint1 endp
code ends
end start
5.link指向乙個字線性表,其中的首單元儲存線性表的長度,編乙個程式,將該線性表中元素的值為負數的項刪除。
datas segment
link dw -9h,3h,33h,2h,1h,-77h,22h,23h,33h
finial dw ($-link)/type link
datas ends
stacks segment
stacks ends
codes segment
assume cs:codes,ds:datas,ss:stacks
start:
mov ax,datas
mov ds,ax
lea si,link
mov cx,finial
ag: mov ax,[si]
cmp ax,0
jge exit
dec cx
push cx
mov di,si
delete:
mov ax,[di+2]
mov [di],ax
add di,2
loop delete
pop cx
exit:
add si,2
loop ag
mov ah,4ch
int21hcodes ends
end start
演算法 test5 最近對問題
設s是平面上n 1個點構成的集合,假設集合中的每個點都不一樣,最近對問題就是找出集合s中距離最近的點對。當n大於等於2小於等於3時,問題可以通過蠻力演算法求解 當n大於3時,可以將集合分成兩個子集s1和s2,然後通過遞迴求解子問題s1和s2來得到最近對問題的解。輸入 按x座標公升序排列的n n 1 ...
彙編test和cmp區別
看過破解教程,都知道test,cmp是比較關鍵,可是我一直不清楚它們究竟是怎麼比較的,最後下決心找了很多資料,和大家一起把它們弄清楚.首先看看 狀態暫存器 即標誌暫存器 psw program flag 程式狀態字 即標誌 暫存器,是乙個16位暫存器,由條件碼標誌 flag 和控制標誌構成,如下所示...
彙編中的test和cmp指令
看過破解教程,都知道test,cmp是比較關鍵,來分析一下它們究竟是怎麼比較 首先看看 狀態暫存器 即標誌暫存器 psw program flag 程式狀態字 即標誌 暫存器,是乙個16位暫存器,由條件碼標誌 flag 和控制標誌構成,如下所示 條件碼 of overflow flag 溢位標誌,溢...