. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->CALL和RET指令
主题 : :  实验10.3,  12666  写屏时无法进行写入(单步调试),显示不相符,求原因  [已解决] 回复[ 8次 ]   点击[ 372次 ]  
zero_one
[帖 主] [ 发表时间:2012-05-06 20:04 ] 
荣誉值:0
信誉值:2
注册日期:2011-09-25 11:28
assume cs:code,ds:data,ss:stack
 

data segment
 
    dw 8 dup (0)
 
data ends
 

stack segment
 
    dw 8 dup(0)
 
stack ends
 

code segment
 
start:
 
        mov ax,data
 
                mov ds,ax
 
                mov ax,stack
 
                mov ss,ax
 
                
                MOV AX,12666
 
                mov si,0
 
                
                call near ptr divdw
 
                
                mov dh,3           ;定义第三行
 
                mov dl,4           ;定义第三列
 
                mov cl,00000010b   ;显示效果为黑底绿字
 
                
                CALL near ptr STRY
 
                
                mov ax,4c00h
 
                int 21h
 
                

        
divdw:  
 
        PUSH AX
 
        
 
        mov ax,dx          ;将被除数高16位存入AX,先进行高16位的运算
 
                mov dx,0           ;被除数高16置0
 
                mov cx,10          ;设置除数为10
 
                DIV CX
 
                MOV BX,AX          ;高16位的商暂存BX
 
                
                POP AX
 
                
                DIV CX
 
                
                PUSH DX           ;最终算出的余数,压入栈中
 
                MOV DX,BX
 
                
                        
                INC SI
 
                
                MOV CX,AX
 
                JCXZ OK
 
        
 
                JMP DIVDW
 
                
OK:     MOV CX,SI
 
        MOV BX,0
 
OK1:    POP AX
 
                
                ADD AL,30H
 
                MOV [BX],AL
 
                INC BX
 
                LOOP OK1
 
                
                RET
 
                
STRY:   
 
        ;显示字符数字到屏幕
 
                MOV al,160
 
        DEC DH
 
        MUL DH
 
        MOV BX,AX
 
        DEC DL
 
        MOV al,2
 
        MUL DL
 
        ADD BX,AX
 
            
 
  
 
        MOV AX,0B800H
 
                MOV ES,AX
 
                MOV AH,CL
 
                
                MOV CX,SI            ;SI中放的是显示数据的总位数
 
                
                MOV SI,0
 
STRY1:  MOV AL,ds:[SI]
 
                MOV ES:[BX],AL
 
                MOV ES:[BX+1],AH
 
                
                INC SI
 
                add bx,2
 
                
                LOOP STRY1
 
                
        RET
 
                
                
code ends
 

END START
zero_one
[第7楼] [ 回复时间:2012-05-07 13:37 ] 
荣誉值:0
信誉值:2
注册日期:2011-09-25 11:28
下午有时间看看吧。
------------------
回复:谢了,兄弟,原因我找到了,估计就是一坑,日了,把标号STRY1随便换了个名字,就正确了,当初我也是随便命名的,都没多想。。。。。。。。。。。。。。。。。。。。。。
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved