首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

若干个汇编子程序解决方法

2012-04-01 
若干个汇编子程序最近开始上微机原理课,写了一些小规模的程序,均调试通过。算法非常简单,供新手学习!PUBLIC

若干个汇编子程序
最近开始上微机原理课,写了一些小规模的程序,均调试通过。算法非常简单,供新手学习!

PUBLIC printDec,getsDec,showBuff,space,enter,getsDec2,printDec2,printBin,printHex

_cod_minesegment
assumecs:_cod_mine

;.................................................
;1、过程名:printDec
;入口参数:BX
;功能:将BX值以十进制形式输出。
;出口参数:无。
;8086模式,16bit realmode
;.................................................
printDec PROCfar
pushf
  push ax
  push bx
  push dx
  pushcx

  mov ax,bx
  mov bx,10
  xorcx,cx
lop10:xor dx,dx
div bx
  add dx,30H
  pushdx
  inccx
  cmp ax,0
  jz lop11  
  jmp lop10

lop11:movah,2
popdx
int21h
looplop11

Quit10: popcx
pop dx
  pop bx
  pop ax
popf
  ret
printDec endp
;.................子过程结束.....................

;.................................................
;2、子过程名:getsDec
;功能:输入无符号数,按回车结束,并保存在Bx中,无回显。
;入口:无,
;出口:BX
;8086,16bit real mode
;................................................
getsDecPROCfar
pushf
push ax
push dx

xordx,dx

lop20:mov ah,8
int 21h
cmpal,0dh
jzquit20
sub al,30h

pushax
mov bx,10
mov ax,dx
mulbx
mov dx,ax
pop ax

xorah,ah
adddx,ax
jmplop20

quit20:mov bx,dx
pop dx
pop ax
popf
ret
getsDecendp
;.................子过程结束.....................

;.................................................
;3、子过程名:getsDec2
;功能:输入带符号数,按回车结束,并保存在Bx中,无回显。
;入口:无,
;出口:BX
;8086,16bit real mode
;................................................
getsDec2PROCfar
pushf
push ax
push dx
pushcx

xordx,dx
xorcx,cx

lop30:mov ah,8
int 21h
cmpal,0dh
jzquit31
cmp al,2dH
jzs1

sub al,30h

pushax
mov bx,10
mov ax,dx
mulbx
mov dx,ax
pop ax

xorah,ah
adddx,ax
jmplop30

s1:movcx,1
jmplop30

quit31: mov bx,dx
cmpcx,1
jzs2
jmpquit30

s2:negbx
jmpquit30

quit30:popcx
pop dx
pop ax
popf
ret

getsDec2 endp
;.................子过程结束.....................

;.................................................
;4、过程名:printDec2
;入口参数:BX
;功能:将BX值以带符号十进制形式输出。
;出口参数:无。
;8086模式,16bit realmode
;.................................................
printDec2 PROCfar
pushf
  push ax
  push bx
  push dx
  pushcx
pushsi

  mov ax,bx
  mov bx,10
  xorcx,cx
xorsi,si

cmpax,0
jgelop40

movsi,1
negax

lop40:xor dx,dx
div bx
  add dx,30H
  pushdx
  inccx
  cmp ax,0
jnzlop40

lop41:cmpsi,1
jnzsss
movax,2dh
pushax
inccx

sss:movah,2
popdx
int21h
loopsss

Quit40: popsi
popcx
pop dx
  pop bx
  pop ax
popf
  ret
printDec2 endp
;.................子过程结束.....................

;.................................................
;5、过程名:printBin
;入口参数:BX
;功能:将BX值以二进制形式输出。


;出口参数:无。
;8086模式,16bit realmode
;.................................................
printBin PROCfar
pushf
  push ax
  push bx
  push dx
  pushcx

movcx,10h

lop50:xordx,dx
rolbx,1
adcdl,dh
adddl,30h
movah,02h
int21h
looplop50


Quit50: popcx
pop dx
  pop bx
  pop ax
popf
  ret
printBin endp
;.................子过程结束.....................

;.................................................
;6、过程名:printHex
;入口参数:BX
;功能:将BX值转化为十六进制形式并输出。
;出口参数:无。
;8086模式,16bit realmode
;.................................................
printHex PROCfar
pushf
  push ax
  push bx
  push dx
  pushcx

  mov ax,bx
  mov bx,16
  xorcx,cx

lop60:xor dx,dx
div bx
cmpdx,9

jnass61

add dx,37H
jmpconti60

ss61:adddx,30h  
   
conti60:pushdx
  inccx
  cmp ax,0
  jz lop61
   
  jmp lop60


lop61:movah,2
popdx
int21h
looplop61

Quit60: popcx
pop dx
  pop bx
  pop ax
popf
  ret
printHex endp
;.................子过程结束.....................


;.................................................
;7、子过程名:showBuff
;入口参数:ds数据段,si指向缓冲区首址.........
;功能:将si指向的缓冲区显示到屏幕上...........
;出口参数:无
;缓冲区必须以“$”结尾!
;.................................................
showBuff procfar
pushf
pushax
pushdx
pushsi
   
mov dx,si
  mov ah,09h
  int 21h
   
popsi
popdx
popax
popf
ret
showBuff endp
;.................子过程结束.....................

;.................................................
;8、子过程名:space
;功能:显示空格。
;入口:无,出口:无。
;.................................................
spacePROCfar
pushax
pushdx

movah,2
movdl,20h
int 21h

popdx
popax
ret
spaceendp
;.................子过程结束.....................

;.................................................
;8、子过程名:enter
;功能:回车,换行
;入口:无,出口:无
;.................................................
enterPROCfar
pushax
pushdx

movah,2
movdl,0dh
int21h
movah,2
movdl,0ah
int21h

popdx
popax
ret
enterendp
;.................子过程结束.....................

_cod_mineends

end

[解决办法]
谢谢,不过能不能请问怎么用汇编完成一下功能:从键盘输入5个整数,求其中负数的平方和···

热点排行