马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在书本的P306页,关于字符串的输入里,有一段代码其中我觉得错了一个字符,如果大虾们都觉得错的话请回帖告诉我一声,代码如下,红色字体为我认为错误的
charstack:jmp short charstart table dw charpush,charpop,charshow top dw 0 ;栈顶(字符地址、个数记录器) charstart:push bx push dx push di push es cmp ah,2 ;判断ah中的功能号是否大于2 ja sret ;功能号>2,结束 mov bl,ah mov bh,0 add bx,bx ;计算对应子程序在table表中的偏移 jmp word ptr table[bx] ;调用对应的功能子程序 charpush:mov bx,top mov [si][bx],al inc top jmp sret charpop:cmp top,0 je sret ;栈顶为0(无字符),结束 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 ;dh*160 mov di,ax add dl,dl ;dl*2 mov dh,0 add di,dx ;di=dh*160+dl*2,es:di指向显存 mov bx,0 ;ds:[si+bx]指向字符串首地址 charshows:cmp bx,top ;判断字符栈中字符是否全部显示完毕 jne noempty ;top≠bx,有未显示字符,执行显示 mov byte ptr es:[di],' ';显示完毕,字符串末加空格 jmp sret noempty:mov al,[si][bx] ;字符ASCII码赋值al mov es:[di],al ;显示字符 mov byte ptr es:[di+2],' ' ;字符串末加空格 inc bx ;指向下一个字符 add di,2 ;指向下一显存单元 jmp charshows ;这里我觉得应该是jmp charshow,而不是jmp charshows sret: pop es pop di pop dx pop bx ret
|