鱼C论坛

 找回密码
 立即注册
查看: 1994|回复: 5

求调教,汇编17章,白送鱼币!!!!

[复制链接]
发表于 2012-7-26 17:37:43 | 显示全部楼层 |阅读模式
5鱼币
;最基本的字符串输入程序,需要具备下面的功能:
;(1) 在输入的同时需要显示这个字符串;
;(2)一般在输入回车符后,字符串输入结束;
;(3)能够删除已经输入的字符。

;编写一个接收字符串的输入子程序,实现上面三个基本功能。
;因为在输入的过程中需要显示,子程序的参数如下:
; (dh)、(dl)=字符串在屏幕上显示的行、列位置;
; ds:si 指向字符串的存储空间,字符串以O 为结尾符。


assume cs:code

code segment
start: 
call getstr 

return: 
mov ax,4c00h
int 21h

;完整的接收字符串输入的子程序

getstr: 
push ax 

getstrs:
mov ah,0
int 16h

cmp al,20h
jb nochar ;判断的是ASCII码小于0,说明不是字符
mov ah,0;
call charstack ;字符入栈
mov ah,2
call charstack ;显示栈中的字符
jmp getstrs


nochar: 
cmp ah,0eh ;退格键的扫描码
je backspace
cmp ah,1ch ;回车键的扫描码
je enter
jmp getstrs


backspace: ;退格
mov ah,1 
call charstack ;字符出栈
mov ah,2
call charstack ;显示栈中的字符
jmp getstrs

enter: ;回车
mov al,0
mov ah,0
call charstack ;0入栈
mov ah,2
call charstack ;显示栈中的字符

pop ax
ret ;getstr ends


;功能子程序实现

charstack:
jmp short charstart

table dw charpush,charpop,charshow
top dw 0 ;栈顶

charstart:
push bx
push dx
push di
push es

cmp ah,2
ja sret
mov bl,ah
mov bh,0
add bx,bx
jmp word ptr table[bx]

charpush:
mov bx,top
mov [si][bx],al
inc top
jmp sret

charpop:
cmp top,0
je sret
dec top
mov bx,top
mov al,[si][bx] 
jmp sret

charshow:
mov bx,0b800h
mov es,bx
mov al,160
mov ah,0 
mul dh
mov di,ax
add dl,dl
mov dh,0
add di,dx

mov bx,0

charshows:
cmp bx,top
jne noempty
mov byte ptr es:[di],' ' 
jmp sret

noempty:
mov al,[si][bx]
mov es:[di],al
mov byte ptr es:[di+2],' '
inc bx
add di,2
jmp charshows

sret: 
pop es
pop di
pop dx
pop bx
ret

code ends

end start
17章了,着急了心糟了了,来个大侠帮忙解惑!
top怎么就是栈顶?没栈段设置就默认他是栈顶了吗?我运行这段代码无效果,要实模式才可以吗?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-7-26 21:40:39 | 显示全部楼层
我觉得这个代码太繁琐了,我自己编写出了一个,照样也可以实现上面所说的功能,最后也算是明白了甲鱼这代码的意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-7-26 21:41:37 | 显示全部楼层
我几天晚上喝了点酒 脑袋是混的...  你要是要源码我下次可以给你哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-27 12:06:16 | 显示全部楼层

我现在好像明白了top是模拟的栈,但是[si][bx]这个指令,没有初始化si,默认在ds段,那么ds,si默认的是基地址是哪?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-30 22:50:39 | 显示全部楼层
没人看了,我自己拿分,问新问题了,鱼币少的可怜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2012-8-3 03:49:41 | 显示全部楼层
代码太多;了....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-8 06:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表