相同的功能,不同的代码

来源:互联网 发布:基础软件服务经营范围 编辑:程序博客网 时间:2024/06/13 21:06
jmp near start        ;跳过数据段
mytext db 'L',0x07,'a',0x07,'b',0x07,'e',0x07,'l',0x07,' ',0x07,'o',0x07,\    ; \ 表示续行符,表示下一行的内容也是本行的
'f',0x07,'f',0x07,'s',0x07,'e',0x07,'t',0x07,':',0x07
number db 0,0,0,0,0

start:
mov ax,0x7c0    ;设置数据段基地址
mov ds,ax

mov ax,0xb800    ;设置附加段基地址
mov es,ax

cld        ;将标志寄存器中的DF清零,表示数据传送是正方向的,从低地址到高地址
mov si,mytext    ;movsw指令表示批量传送数据,传送的单位是字,原地址是ds:si,目的地址是es:di
mov di,0
mov cx,(number-mytext)/2    ;实际上等于13,cx表示传送的次数,每次执行movsw,cx都会减一
rep movsw            ;重复执行movsw,直到cx为0

;得到标号所代表的偏移地址
mov ax,number

;计算各个数位
mov bx,ax    
mov cx,5    ;循环次数
mov si,10    ;除数
digit:
xor dx,dx
div si
mov [bx],dl    ;保存数位
inc bx
loop digit    ;每次执行digit,cx会减一

;显示各个数位
mov bx,number
mov si,4
show:
mov al,[bx+si]
add al,0x30
mov ah,0x04
mov [es:di],ax
add di,2
dec si
jns show

mov word[es:di],0x0744

jmp near $    ;$表示现在这行的地址
times 510-($-$$) db 0    
;$$表示源文件的初始地址,用当前汇编地址减去程序开头的汇编地址,就是程序实体的大小,再用510减去实体大小,就是需要填充的字节数
db 0x55,0xaa
0 0
原创粉丝点击