-94- | PC机汇编语言实战精解 | ![]() |
|||||||||||||||||||
-t | |||||||||||||||||||||
AX=0242 | BX=0103 | CX=0004 | DX=1B42 | SP=0000 | BP=0000 | SI=0000 | DI=0000 | ||||||||||||||
DS=0E69 | ES=0E69 | SS=0E69 | CS=0E69 | IP=0000 | NV UP EI PL NZ NA PO NC | ||||||||||||||||
0E69:0000 | CD20 | INT 20 | |||||||||||||||||||
事实上,在上面这个程序中完全可以不用LABEL伪指令,而直接采用传统的标号"HEX2ASC:",这并不影响程序的编译和执行。 除了部分调用之外,过程还可以对其自身进行调用,这就是所谓的递归调用,而这样的过程称为递归过程。采用递归算法往往能编制出效率较高的程序,但要注意一点--待解决的问题要有递归定义。请看这样一个问题:如何将任意字符串按逆序印出? 问题十分简单,通常的方法是用BX(或其它)寄存器作为指针,指向最后一个字符,而后让指针递减,依次取出每个字符打印出来。下面的程序就是按这种思路编制的: |
|||||||||||||||||||||
DISP.ASM | |||||||||||||||||||||
data mess data code main loop1: |
segment assume db'Welcom ends segment assume proc mov mov mov mov int mov mov mov mov int dec loop mov int |
ds:data e to PC world!',0dh,0ah,24h cs:code far ax,data ds,ax dx,offset mess ah,9 21h cx,22 bx,offset mess+21 dl,byte ptr [bx] ah,2 21h bx loop1 ah,4ch 21h |
;初始化DS寄存器指向数据区 ;DX寄存器指向字符串MESS ;显示字符串MESS ;处理22个字符 ;BX寄存器指向字符串末尾一个字符 ;取得末尾一个字符 ;显示这个字符 ;BX指向前一个字符 ;循环至LOOP1显示前一个字符 ;结束进程 |
||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |