組合語言(二十二)之統計減去奇數的個數

2021-09-07 15:12:43 字數 2641 閱讀 6679

輸入乙個正數,該數減去遞增奇數(從1開始)直至小於等於零為止,計算該數減去奇數的個數

程式執行:

mov ax,datas ;初始化ds

mov ds,ax

;輸入a提示

lea dx,inputnum

mov ah,9

int 21h

;輸入a

lea dx,num_string

mov ah,10

int 21h

;a轉成十進位制數

lea si,num_string+1

call translate_to_number

mov num,ax

;mov ax,num

mov bx,1

mov cx,0

s:sub ax,bx ;減去奇數

inc cx

add bx,2 ;奇數加2

cmp ax,0 ;判斷ax是否大於0

jg s ;若大於0,迴圈繼續

mov ans,cx

lea dx,outputans ;輸出ans

mov ah,9

int 21h

mov ax,ans

call decimal

retmain endp

;字串轉換為十進位制數

translate_to_number proc near

;si:lenght first

push cx

push dx

push bx

push si

push di

mov di,10

mov ax,0

mov cl,[si]

mov ch,0

cmp cx,0

jz err

inc si

tran:

mov bl,[si]

inc si

cmp bl,'0'

jb err

cmp bl,'9'

ja err

sub bl,30h

xor bh,bh

mul di

add ax,bx

loop tran

jmp exit

err:

lea dx,error_number

mov ah,9

int 21h

mov ax,4c00h

int 21h

exit:

pop di

pop si

pop bx

pop dx

pop cx

ret

translate_to_number endp

decimal proc near

push ax

push cx

push dx

push bx

cmp ax,0

jge plus

mov bx,ax

mov dl,'-'

mov ah,2

int 21h

neg bx

mov ax,bx

plus:

mov cx,0

mov bx,10

de:xor dx,dx

div bx

push dx

inc cx

cmp ax,0

jnz de

de1:

pop dx

add dl,30h

mov ah,2

int 21h

loop de1

pop bx

pop dx

pop cx

pop ax

ret

decimal endp

codes ends

end main

組合語言學習之組合語言源程式的輸入

在dos下輸入彙編源程式的方法 一 環境的搭建 二 熟悉debug的一些除錯指令 當顯示器顯示出提示符 時,說明已進入到debug狀態,此時,可以用debug命令列來操作 1.r 指令 用法 r 暫存器的名字 作用 用於檢視暫存器的值 register的首字母 或者修改暫存器的內容。當暫存器的名字省...

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

輸入乙個數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...

組合語言(十一)之統計非數字字元個數

輸入以 結尾的字串,統計並輸出非數字字元的個數 程式執行 mov ax,datas 初始化ds mov ds,ax lea si,inputprompt 輸出輸入提示 mov ah,2 mov cx,inputpromptlen 輸出輸入提示的字串長度 s2 mov dl,si int 21h 輸出...