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

2021-09-07 15:25:30 字數 2743 閱讀 4714

輸入乙個數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 si,n_string

call todigit

mov n,ax

mov ax,0

mov dx,0

mov cx,n ;迴圈的次數

mov bx,1 ;求和從一開始

s:add ax,bx ;求和

adc dx,0

inc bx

loop s

mov word ptr sum,ax ;儲存求和的結果

mov word ptr sum+2,dx

lea dx,output ;輸出提示

mov ah,9

int 21h

mov ax,word ptr sum ;輸出求和

mov dx,word ptr sum+2

call print_decimal

retmain endp

todigit proc near uses bx cx dx si di

;si ,ax

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

xor ch,ch

inc si ;si指向第乙個元素

mov ax,0 ;初始化ax,dx

mov dx,0

mov di,10 ;除數

dig:

mov bl,[si]

cmp bl,'0' ;判斷是否小於'0'

jb err ;若低於'0',則錯誤字元

cmp bl,'9' ;判斷是否大於'9'

ja err ;若高於'9',則錯誤字元

sub bl,30h ;否則,將數字字元轉成數字

xor bh,bh

mul di ;乘十

add ax,bx ;加上個位

adc dx,0

inc si

loop dig

cmp dx,0 ;判斷高位是否為0

jnz err ;若不為0,錯誤

jmp exit

err: ;輸出錯誤

push ds

push cs

pop ds

lea dx,error_tip

mov ah,9

int 21h

pop ds

mov ah,4ch

int 21h

exit:

ret

error_tip db 0dh,0ah,'input error$'

todigit endp

print_decimal proc near uses ax bx cx dx

mov bx,10

mov cx,0

dea:

div bx

push dx

inc cx

xor dx,dx

cmp ax,0

jnz dea

dea1:

pop dx

add dl,30h

mov ah,2

int 21h

loop dea1

ret

print_decimal endp

codes ends

end main

第二十六期 openEuler組合語言(2)

上一期中我們介紹了一些arm組合語言的程式設計方法,這一期我們介紹一下arm內嵌彙編器並嘗試分析一下openeuler中的一段彙編 c c 編譯器中包含了內嵌彙編器,使用這些內嵌彙編器可以在c或c 中使用大部分arm指令和thumb指令。內嵌彙編指令中,作為運算元的暫存器和常量可以是c或c 表示式,...

組合語言(二十三)之求乙個數的補數

給定乙個數,求該數的補數 程式執行 mov ax,datas 初始化ds mov ds,ax 輸出原始的num lea dx,outputnum mov ah,9 int 21h mov bl,n xor bh,bh dec bx os mov al,num bx call hexidemical ...

組合語言(二十一)之數值交換與自增

輸入兩個數,如果第乙個數為偶數第二個數為奇數,互換位置 如果兩個數都是奇數,則兩個數都加一 程式執行 mov ax,datas 初始化ds mov ds,ax 輸入a提示 lea dx,inputa mov ah,9 int 21h 輸入a lea dx,a string mov ah,10 int...