兩個彙編小程式

2021-06-06 20:08:49 字數 3642 閱讀 9732

開發環境為emu8086!!

1 begin

name "run nian" 

;project to check if it's run nian.

propmt macro   ppt      ;定義輸出巨集

mov dx,offset ppt

mov ah,09h

int 21h

endm     

stack segment

dw 100 dup(?)

stack ends

data segment                       

input   db "please input a concreat year:",10,13,'$'

outpyes db "it's a run nian!",10,13,'$'

outpno  db "it's not a run nian!",10,13,'$'

data ends

code segment

assume cs:code, ds:propmt,ss:stack

start:

mov ax,data    

mov ds,ax 

mov ax ,offset input

call printfs

mov ax ,offset outpyes

call printfs

mov ax ,offset outpno

call printfs

mov dl,'s'

call printfc

mov dl,'x'

call printfc

mov dl,'b'

call printfc

mov  ah,4ch

int 21h

printfs proc       ;輸出字串函式引數存放於ax中

mov dx,ax

xor ax,ax

mov ah,09h

int 21h

retprintfs endp

printfc proc       ;輸出字元函式引數存放於ax中,dl is param

mov ah,02h

int 21h

retprintfc endp 

code ends

end start

/1  end/

2 begin

name "interrupt"

data   segment

propmt  db "please input year=$"

year    db 10, ?, 9  dup('$')  ;變數

string  db 101,?, 100 dup('$') ;字串以'$'結束

x       dw  0                  ;中介

high_w  dw  0                  ;資料的高十六位  

low_w   dw  0                  ;低十六位

h16     dw  0                  ;(dx:ax)=10^i

l16     dw  0

data   ends

code segment

assume cs:code, ds:data, ss:stack

start:

mov ax,data

mov ds,ax

mov es,ax

;提示輸入變數

lea dx,propmt

mov ah,9

int 21h

;輸入年份

mov ah,10

lea dx,year

int 21h

;cx儲存實際輸入字元個數

xor cx,cx    

mov cl,byte ptr year[1]

push cx

;輸出資料長度     

mov ah,2

add cl,30h

mov dl,13

int 21h

mov dl,10

int 21h

mov dl,cl

int 21h  

pop cx

;對所輸入的字元轉化為十進位制

call yearchasla

;exit dos                       

xor ax,ax

mov ah,4ch

int 21h

;對所輸入的字元轉化為十進位制    

yearchasla proc near

push cx

push si

push bx

xor si,si

add si,2

mov bx,cx      ;暫存cx的值

lycs:

sub byte ptr year[si],30h

inc si

loop lycs

dec  si        ;調整si

mov  cx,bx     ;次數重灌

;對獲取的十進位制值資料累加 

mov  bx,10     ;bx用

mov  dx,0

mov  ax,1      ;for(;cx-1!=0;i++)每迴圈一次乘以10

mov  l16,ax    ;即ax=((ax=10^i)* 10)

mov  h16,dx

sumget:

mov  al,byte ptr year[si] 

cbw            ;把數值擴充套件為16位

add  low_w ,ax

call proceyear

dec  si

loop sumget

ret

yearchasla endp

proceyear  proc

;完成(h16:l16)=10^i   

mov  ax,h16

mul  bx        ;dx * 10^i

mov  h16,ax

mov  ax,l16    ;l16=(l16*1)*10*10...*10

mul  bx        ;實現 (dx:ax)=10^i

add  h16,dx

mov  l16,ax

;完成(high_w:low_w)*l16    

mul  high_w

mov  high_w,ax ;dx被清零

mov  ax,l16

mul  low_w

add  high_w,dx

mov  low_w,ax

;完成(high_w:low_w)*h16

mov  ax,h16

mul  high_w

mov  high_w,ax ;dx被清零

mov  ax,h16

mul  low_w

add  high_w,dx

mov  low_w,ax     

retproceyear  endp

code ends

end start

/2  end/

分享兩個小程式

小編也不知道大家能不能用的到,我只是把我學到的知識分享出來,有需要的可以看一下。python本身就是乙個不斷更新改進的語言,不存在抄襲,有需要就可以拿過來用,在用的過程中,你發現可以用另外一種方法把它實現,就可以把 做進一步的優化,然後分享出來,這樣python會變的越來越實用。今天心情不好,分享兩...

兩個小電路

第乙個是cmos與非門振盪電路 這個電路的原理其實是負反饋,b點反饋給a,因為a,b兩點的電壓相反所以是負反饋。又因為在a與e之間加了電容,所以是慢反饋,b和a如蹺蹺板兩端,在0與1之間來回跳變,那麼就會形成振盪,振盪頻率計算公式如下 第二個電路是電容降壓型穩壓電路 將交流市電轉換為低壓直流的常規方...

彙編 通過子程式交換兩個記憶體變數

交換 esi edi 兩個記憶體變數 moveax,esi xchg eax,edi mov esi eax 功能 使用子程式交換兩個記憶體變數 include vcio.inc data num1 dword 1234 num2 dword 5678 str output byte num1 d,...