鱼C论坛

 找回密码
 立即注册
查看: 11498|回复: 8

实验14,我写的程序达不到要求,但是我不知道错在那里了。

[复制链接]
发表于 2011-9-29 01:53:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
assume cs:code
ds1 segment
db '/',':'
ds1 ends
code segment
start:mov si,160*12+40*2
mov ax,0b800h
mov es,ax
mov ax,ds1
mov ds,ax
mov bx,0
mov cx,3
mov al,9
call s
mov al,4
mov cx,3
call s1
mov ax,4c00h
int 21h
s: push cx
push ax
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add ah,30h
add al,30h
mov es:[si],ah
mov es:[si+2],al
pop ax
add si,6
dec al
pop cx
dec cx
jcxz send
jmp s
send: mov ax,ds:[bx]
mov es:[si-2],ax
mov es:[si-6],ax
ret
s1: push cx
push ax
out 70h,al
in al,71h
mov ah,al
mov cl,4
shr ah,cl
and al,00001111b
add ah,30h
add al,30h
mov es:[si+6],ah
mov es:[si+8],al
pop ax
add si,6
sub al,2
pop cx
dec cx
jcxz s1end
jmp s1
s1end: mov ax,ds:[bx+1]
mov es:[si-2],ax
mov es:[si-6],ax
ret

code ends
end start
大家帮我找找那里又问题,结果总是让我输入新的时间。而不是显示。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-29 16:55:40 | 显示全部楼层
子程序应该用  xxx  proc
                    ..........
                    xxx  endp
定义的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-29 18:01:26 | 显示全部楼层
本帖最后由 flyue 于 2011-9-29 18:03 编辑

proc,和endp是什么指令啊,为什么要用这个定义子程序才可以
加进去编译的时候显示Operand must be type specifier,操作数必须类型说明报警。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-9-29 19:11:35 | 显示全部楼层
用Call说明代码不在一个段,如果不定义子程序那你就把代码定义在一个段内用JMP
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-9-29 20:35:59 | 显示全部楼层
CALL可以进行段内近转移啊。CALL S就是段内近转移,JMP NEAR S。这个段内转移啊。所以不应该存在你说的不在一个段的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-2 23:24:13 | 显示全部楼层
在代码规范方面,你得下些功夫!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-11 21:11:49 | 显示全部楼层
assume cs:code
        
ds1 segment
        db '/',':'
ds1 ends
        
code segment
start:
        mov si,160*12+40*2
        mov ax,0b800h
        mov es,ax
        
        mov ax,ds1
        mov ds,ax
        
        mov bx,0
        mov cx,3
        mov al,9
        
        ;取日期
        call s
        
        mov al,4
        
        mov cx,3
        
        call s1
        
        mov ah,1
        
        int 21h
        
        mov ax,4c00h
        
        int 21h
        
s: push cx
        push ax        
        out 70h,al        
        in al,71h
        
        mov ah,al
        mov cl,4
        shr ah,cl
        and al,00001111b
        
        add ah,30h
        add al,30h
        
        mov es:[si].0,ah
        mov es:[si].2,al
        
        pop ax
        add si,6
        dec al        

        pop cx
        dec cx
        
        jcxz s_end
        
        jmp s
        
s_end:
        mov al,ds:[bx]
        
        ;因为直接写入显存中,一个字符占两个字节。
        ;y  y  /  m  m  /  d  d
        ;01 23 45 67 89 AB CD EF
        mov es:[si-14],al
        mov es:[si-8],al
        ;这里用ax相当于把“/”的高位也传进显存中。“/”的颜色受ah影响
        ret
        
s1: 
        push cx
        push ax
        
        out 70h,al
        in al,71h
        mov ah,al
        
        mov cl,4
        shr ah,cl
        and al,00001111b
        add ah,30h
        add al,30h
        
        mov es:[si].0,ah        
        mov es:[si].2,al
        
        pop ax        
        add si,6
        
        sub al,2
        
        pop cx
        
        dec cx
        
        jcxz s1end
        
        jmp s1
        
s1end: 
        mov al,ds:[bx+1]        
        mov es:[si-14],al
        mov es:[si-10].2,al        
        ret



code ends

end start
修改好了,你自己对比吧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-11 21:25:33 | 显示全部楼层
        mov ah,1

        int 21h
        
        mov ax,4c00h
        
        int 21h
mov ah,1
int 21h
这是按任意键继续。和上面没关系!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-5 00:31:14 | 显示全部楼层
;实验14:编程,以“年/月/日 时:分:秒” 的格式,显示当前日期、时间
assume cs:code

code segment
start:
                mov ax,0b800h
                mov ds,ax
                mov di,12*160+80-18                ;设置显示位置
                mov dh,2                                ;设置显示属性
                
                mov al,9
                mov bl,'/'
                call readTime
                
                mov al,8
                mov bl,'/'
                call readTime
                
                mov al,7
                mov bl,' '
                call readTime
                
                mov al,4
                mov bl,':'
                call readTime
                
                mov al,2
                mov bl,':'
                call readTime
                
                mov al,0
                mov bl,0
                call readTime
                
                mov ax,4c00h
                int 21h
                
showTime:;显示数据,dl为要显示的字符;dh为显示的属性
                mov [di],dx
                add di,2
ret

;参数(al:端口号;bl:附加符号) 功能:读取CMOS RAM的端口(al)的信息,并显示到屏幕上
readTime:
                ;读取CMOS RAM的端口(al)的信息
                out 70h,al
                in al,71h
                
                ;获取高4位二进制信息
                mov ah,al
                mov cl,4
                shr ah,cl
                
                ;获取低4位二进制信息
                and al,00001111b
                
                ;转换为ASCII码
                add ah,30h
                add al,30h
                
                mov dl,ah
                call showTime
                
                mov dl,al
                call showTime
                
                mov dl,bl
                call showTime
ret
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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