組合語言(二十七)之身份證最後一位求和校驗

2021-09-07 15:26:32 字數 2031 閱讀 3734

輸入身份證前十七位數字,輸入18位身份證

程式執行:

mov ax,datas ;初始化ds

mov ds,ax

;輸入提示

lea dx,input

mov ah,9

int 21h

;輸入n

lea dx,id_max_length

mov ah,10

int 21h

lea si,id

mov cl,[si] ;設定迴圈次數

cmp cl,17 ;判斷長度是否合法

jnz err

xor ch,ch

inc si

mov dx,0

s:mov al,17

sub al,cl

lea bx,w

xlat ;獲取wi

mov bl,[si]

cmp bl,'0' ;判斷字元是否合法

jb err

cmp bl,'9'

ja err

sub bl,30h ;獲取ai

mul bl ;乘積

add dx,ax ;累加求和

inc si

loop s

mov ax,dx

mov bl,11 ;和對11求餘數

div bl

mov al,ah

lea bx,y

xlat ;獲得第一位字元

mov id+1+17,al ;設定輸出字串

mov id+1+18,'$'

lea dx,output ;輸出提示

mov ah,9

int 21h

lea dx,id+1 ;輸出身份證號碼

mov ah,9

int 21h

jmp exit

err:

lea dx,output_error ;若錯誤,輸出錯誤提示

mov ah,9

int 21h

exit:

retmain endp

codes ends

end main

演算法精解二十七(C語言版)

迴圈鍊錶的介紹 迴圈鍊錶是另一種形式的鍊錶,它提供了更為靈活的遍歷鍊錶元素的能力。迴圈鍊錶可以單向的或雙向的,單區分乙個鍊錶是不是迴圈鍊錶只要看它有沒有尾部元素即可。在迴圈鍊錶中,最後乙個元素的next指標又回頭元素而不是設定為null。在雙向迴圈鍊錶中,頭元素的prev指標則指向最後乙個元素,這使...

組合語言(二十六)之自然數求和

輸入乙個數n,對1到n的所有自然數求和 程式執行 mov ax,datas 初始化ds mov ds,ax 輸入提示 lea dx,input mov ah,9 int 21h 輸入n lea dx,n string max length mov ah,10 int 21h 轉換成為數字 lea s...

第二十五期 openEuler組合語言(1)

上兩期中我們介紹了armv8 a的快取一致性特性,在這兩期中我們介紹openeuler系統中的組合語言。為了更好地學習這些組合語言,我們先來了解一下arm體系結構相關的組合語言的使用。在之前的 中我們介紹了armv8 a架構的指令集和暫存器。指令集就如同高階程式語言中的語句,暫存器就如同語句中的變數...