锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
using namespace std;
int a=1;/*a,b 搴斿綋閮芥槸鍏ㄥ眬鐨?/span>*/
int b=10;
int main(int argc,char **argv)
{
cout<<sizeof(int)<<endl;
/*AT&T 瑙勮寖 Not Intel*/
__asm("mov _b,%eax");//mov 鐨勫乏杈規(guī)槸婧愶紝鍙寵竟鏄洰鏍?nbsp;
__asm("mov %eax,_a");
cout<<a<<endl;
cout<<b<<endl;
cout<<"a+b="<<a+b<<endl;
getchar();
return(a-b);
}
win32:VC6.0鏍煎紡:
#include <iostream>
using namespace std;
int main(int argc,char **argv)
{
/*int鐨勯暱搴﹀拰eax鐨勯暱搴︿竴鏍烽兘鏄?涓瓧鑺?/span>*/
cout<<sizeof(int)<<endl;
int a=100;
int b=10;
/*Intel 瑙勮寖*/
__asm{
mov eax,a;//eax 鏄洰鏍囷紝a 鏄簮
add eax,b;
mov a,eax;
}
cout<<a<<endl;
cout<<"a+b="<<a<<endl;
return(a-b);
}
]]>
db 256 dup(0)
stack ends
;
data segment para public 'data'
buffer db 16h dup(0)
bufpt1 dw 0
bufpt2 dw 0
kbflag db 0
prompt db '---kbd_io program begin ---',13,10,'$'
scantab db 0,0,'1234567890-=',0,0
db 'qwertyuiop[]',0dh,0
db 'asdfghjkl;',0,0,0,0
db 'zxcvbnm,./',0,0,0
db ' ',0,0,0,0,0,0,0,0,0,0,0,0,0
db '789-456+1230.'
even
shiftab db 0,0,'!@#$%^&*()_+',0,0
db 'QWERTYUIOP{}',0dh,0
db 'ASDFGHJKL:"',0,0,0
db 'ZXCVBNM<>?',0,0,0
db ' ',26 dup(0)
even
oldcs9 dw ?
oldip9 dw ?
data ends
;
code segment para public 'code'
start proc far
assume cs:code,ds:data
push ds
mov ax,0
push ax
mov ax,data
mov ds,ax
cli
mov al,09
mov ah,35h
int 21h
mov oldcs9,es
mov oldip9,bx ;淇濆瓨涓柇
push ds
mov dx,offset kbint
mov ax,seg kbint
mov ds,ax
mov al,09
mov ah,25h
int 21h
pop ds ;璁劇疆涓柇
in al,21h
and al,0fdh
out 21h,al
mov dx,offset prompt
mov ah,09
int 21h
sti
forever:
call kbget
test kbflag,80h
jnz endint
push ax
call dispchar
pop ax
cmp al,0dh
jnz forever
mov al,0ah
call dispchar
jmp forever
endint:
mov dx,oldip9
mov ax,oldcs9
mov ds,ax
mov al,09h
mov ah,25h
int 21h
ret
start endp
kbget proc near
push bx
cli
mov bx,bufpt1
cmp bx,bufpt2
jnz kbget2
cmp kbflag,80h
jz kbget3
sti
pop bx
jmp kbget
kbget2:
mov al,[buffer+bx]
inc bx
cmp bx,16
jc kbget3
mov bx,0
kbget3:
mov bufpt1,bx
pop bx
ret
kbget endp
;------------------------------------------------------------
kbint proc far
push bx
push ax
;
in al,60h
push ax
in al,61h
or al,80h
out 61h,al
and al,7fh
out 61h,al
;
pop ax
test al,80h
jnz kbint5
cmp al,42
jz left_shif
cmp al,54
jz right_shif
test kbflag,03h ;鍒ゆ柇shif閿槸鍚︽寜浣?nbsp;
jnz press_shif
mov bx,offset scantab
xlat scantab
cmp al,0
jnz kbint4
mov kbflag,80h
jmp kbint2
left_shif:
or kbflag,01h
jmp kbint2
right_shif:
or kbflag,02h
jmp kbint2
press_shif:
mov bx,offset shiftab
xlat shiftab
cmp al,0
jnz kbint4
mov kbflag,80h
jmp kbint2
kbint4:
mov bx,bufpt2
mov [buffer+bx],al
inc bx
cmp bx,16
jc kbint3
mov bx,0
kbint3:
cmp bx,bufpt1
jz kbint2
mov bufpt2,bx
kbint5:
cmp al,0aah
jz kbint1
cmp al,0b6h
jz kbint1
jmp kbint2
kbint1: mov kbflag,0
kbint2:
cli
mov al,20h
out 20h,al
pop ax
pop bx
sti
iret
kbint endp
;
dispchar proc near
push bx
mov bx,0
mov ah,0eh
int 10h
pop bx
ret
dispchar endp
;
code ends
end start
]]>
;鍦ㄦ湰嬈¤瘯楠屼腑闇瑕佹敞鎰忓熀鍧瀵勫瓨鍣˙X鐨勭Щ鍔ㄦ柟娉曪紝瀵逛互瀛椾負(fù)鍗曚綅鐨勬暟緇勶紝BX鐨勭Щ鍔ㄦ柟寮?br> ;鏄瘡縐誨姩涓嬈″姞2鎴栬呭噺2
;鍙﹀鍑芥暟璋冪敤鐨勮繃紼嬩腑闇瑕佸皬蹇働USH鍜宲op鐨勮皟鐢ㄦ槸鍚﹀畨鍏紝渚嬪鍦╪ame_sort涓璸op CX鐨?br> ;鏃跺欐病鏈夊厛Push CX錛屽鑷翠簡name_sort鍑芥暟涓嶅彲浠ヨ皟鐢?br> ;姝ょ▼搴忎嬌鐢ㄦ瘮杈冮珮鏁堢殑鏂規(guī)硶鍙槸瀵瑰彿鐮佸崟鐨勯鍦板潃榪涜鎺掑簭錛屼負(fù)姝ゅ紑杈熶簡涓涓湴鍧鏁扮粍
;AdTable錛岀被浼糃璇█涓殑鎸囬拡鏁扮粍
;鍦ㄦ瘡涓悕瀛楃殑鍓嶉潰瀛樻湁姣忎釜鍚嶅瓧鐨勯暱搴︼紝鏈夊埄浜庡鍚嶅瓧榪涜姣旇緝錛屼綋鐜頒簡絀洪棿鎹㈡椂闂?br> ;紼嬪簭璋冭瘯闅懼害杈冨ぇ錛岃垂鏃?澶╅暱搴︼紝闀垮害349琛?br> ;12鏈?鏃ヤ簬嫻烽煹
;==================================================================
DateArea segment
TemplateName db 20,?,20 dup(?)
TemplateNumber db 9,?,9 dup(?)
PhoneTable db 50 dup ( 21 dup (?), 8 dup (?) ,'$')
AdTable dw 50 dup (?)
FindedAdress dw 1 dup (?)
InputNamePrint db 13,10,'Input name:','$'
InputNumPrint db 13,10,'Input a telephone number:','$'
AskForNumPrint db 13,10,'Do you want a telepment numbre:(Y/N)','$'
NamePrint db 13,10,'name?','$'
AnswerFindedPrint db 13,10,'name',16 dup (20h),'tel.',13,10,'$'
AnswerNoFindPrint db 13,10,'NO SUCH NAME!','$'
DateArea ends
;=====================================================================
CodeArea segment
assume cs:CodeArea ,ds:DateArea ,es:DateArea
;-----------------------------
main proc far
push ds
sub ax,ax
push ax
mov ax,DateArea
mov ds,ax
mov es,ax
;
mov bx,0
lea si,PhoneTable
Start:
lea dx , InputNamePrint
mov ah,09h
int 21h
;
lea di,AdTable
mov AdTable[bx],si
call input_name;璇ュ嚱鏁拌繕瑕佽繑鍥炶緭鍏ュ瓧姣嶄負(fù)緇堟鏃跺欑殑鎻愮ず,
;鍙互榪斿洖涓涓瘎瀛樺櫒鐨勭姸鎬佹潵琛ㄧず
jz Search
call stor_name
;
lea dx, InputNumPrint
mov ah ,09h
int 21h
;
call inphone
;
add si,30
add bx ,2
jmp Start
Search:
;lea dx, AskForNumPrint
;mov ah,09h
;int 21h
call name_sort
lea dx, AskForNumPrint
mov ah,09h
int 21h
;
mov ah,1
int 21h
sub al,4Eh
;
jz Exit
;
lea dx,NamePrint
mov ah,09h
int 21h
;
call input_name
;
call name_search
;
call printline
;
jmp Search
Exit: ret
main endp
;------------------------------
input_name proc near
push ax
push bx
push cx
push dx
push si
push di
;
lea dx,TemplateName
mov ah,0ah
int 21h
lea di ,TemplateName
add di,1
mov al,[di]
cmp al,0
;
pop di
pop si
pop dx
pop cx
pop bx
pop ax
;
ret
input_name endp
;------------------------------
stor_name proc near
push ax
push bx
push cx
push dx
push si
push di
;
mov di,AdTable[bx]
lea si,TemplateName
add si,1
mov dx,21
mov cl,[si]
mov al,cl
cbw
mov cx,ax
inc cx
sub dx,cx
cld
repnz movsb
mov cx,dx
cld
mov al ,20h
repnz stosb
;
pop di
pop si
pop dx
pop cx
pop bx
pop ax
;
ret
;
stor_name endp
;------------------------------
inphone proc near
push ax
push bx
push cx
push dx
push si
push di
;
lea dx,TemplateNumber
mov ah,0ah
int 21h
;
mov di,AdTable[bx]
add di,21
lea si,TemplateNumber
add si,1
mov cl,[si]
mov al,cl
cbw
mov cx,ax
add si,1
cld
repnz movsb
;
pop di
pop si
pop dx
pop cx
pop bx
pop ax
;
ret
inphone endp
;------------------------------
name_sort proc near
push ax
push bx
push cx
push dx
push si
push di
lea dx, AskForNumPrint
mov ah,09h
int 21h
mov cx,bx
OuterSort:
mov bx,0
InnerSort:
mov si,AdTable[bx]
add bx,2
mov di ,AdTable[bx]
mov al,[si]
mov dl,[di]
cmp al,dl
push cx
jg AxGrBx
mov al,dl
cbw
mov cx,ax
jmp PassAGB
AxGrBx:
cbw
mov cx,ax
PassAGB:
add si ,1
add di ,1
cld
repz cmpsb
pop cx
jb Belower
mov ax,AdTable[bx]
sub bx,2
mov dx,AdTable[bx]
xchg ax,dx
mov AdTable[bx],dx
add bx,2
mov AdTable[bx],ax
Belower:
mov ax,bx
add ax,2
cmp ax,cx
jnz InnerSort
sub cx,2
cmp cx,2
jnz OuterSort
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
name_sort endp
;------------------------------
name_search proc near
push ax
push bx
push cx
push dx
push si
push di
mov ax,bx
mov bx ,0
mLoop:
lea si,TemplateName+1
mov cl,[si]
push ax
mov al,cl
cbw
mov cx,ax
add cx,1
pop ax
mov di,AdTable[bx]
cld
repz cmpsb
jz FindOutNum
add bx, 2
cmp bx ,ax
jz FindNoNum
jmp mLoop
FindNoNum:
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
FindOutNum:
mov dx,AdTable[bx]
add dx,1
mov FindedAdress,dx
;mov ah,09h
; int 21h
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
name_search endp
;------------------------------
printline proc near
push ax
push bx
push cx
push dx
push si
push di
jz NoFind
lea dx,AnswerFindedPrint
mov ah,09
int 21h
mov dx,[FindedAdress]
mov ah,09h
int 21h
JMP RetPlace
NoFind:
lea dx,AnswerNoFindPrint
mov ah,09h
int 21h
RetPlace:
pop di
pop si
pop dx
pop cx
pop bx
pop ax
ret
printline endp
;------------------------------
CodeArea ends
end main
]]>
]]>
]]>