lyoal 发表于 2012-12-22 15:12:47

十三章实验题 求大牛指点一下,代码中还需要修改那些地方?

本帖最后由 lyoal 于 2012-12-22 15:47 编辑

十三章实验题 求大牛指点一下,代码中还需要修改那些地方?
不知道是不是寄存器冲突导致的
assume cs:code
data segment
db 'Welcom to masm!',0
data endscode segment
start:
;========================安装中断例程=============================================
mov ax,cs    ;定义中断例程数据源
mov ds,ax
mov si,offset sst

mov ax,0    ;定义中断例程安装的目的地址
mov es,ax
mov di,200h

mov cx,offset ssend - offset sst ;定义中断例程的长度
cld      ;定义数据传送方向
rep movsb    ;传送字符

mov ax,0
mov es,ax    ;设置中断向量
mov word ptr es:,200h
mov word ptr es:,0

mov ax,4c00h
int 21h
;===========================主程序=========================================
mov dh,10   ;行
mov dl,10   ;列
mov cl,2   ;颜色
mov ax,data
mov ds,ax   ;将字符串数据段关联到DS
mov si,0   ;设置SI为字符串首地址
int 7ch

mov ax,4c00h
int 21h;======================被安装的中断例程=========================================

sst: mov ax,0b800h;关联显示缓冲区
mov es,ax
mov di,9*160+10*2 ;设置字符串在显示缓冲区的首地址

s:cmp byte ptr ,0
je short ok
mov ch,byte ptr
mov byte ptr es:, ch
mov byte ptr es:,cl
inc si
add di,2
jmp short s

ok:iret

ssend: nop
    code ends
end start

wawa 发表于 2012-12-22 15:12:48

兄弟,你进步神速啊,自己解决了,你分给谁啊,可是给不了自己的哦,上次在我求助帖里我可是帮你解决一些问题了哦,这里的分是不是应该给我啊:(

lyoal 发表于 2012-12-22 15:45:04

本帖最后由 lyoal 于 2012-12-22 15:46 编辑

assume cs:code
data segment
db 'Welcom to masm!',0
data endscode segment
start:
;========================安装中断例程=============================================
mov ax,cs    ;定义中断例程数据源
mov ds,ax
mov si,offset sst

mov ax,0    ;定义中断例程安装的目的地址
mov es,ax
mov di,200h

mov cx,offset ssend - offset sst ;定义中断例程的长度
cld      ;定义数据传送方向
rep movsb    ;传送字符

mov ax,0
mov es,ax    ;设置中断向量
mov word ptr es:,200h
mov word ptr es:,0
    ;mov ax,4c00h
;int 21h
;===========================主程序=========================================
mov dh,10   ;行
mov dl,10   ;列
mov cl,2   ;颜色
mov ax,data
mov ds,ax   ;将字符串数据段关联到DS
mov si,0   ;设置SI为字符串首地址
int 7ch

mov ax,4c00h
int 21h;======================被安装的中断例程===============================================

sst: mov ax,0b800h;关联显示缓冲区
mov es,ax
mov di,9*160+10*2 ;设置字符串在显示缓冲区的首地址

s:cmp byte ptr ,0
je short ok
mov ch,byte ptr
mov byte ptr es:, ch
mov byte ptr es:,cl
inc si
add di,2
jmp short s

ok:iret

ssend: nop
    code ends
end start 自己解决了,谢谢自己一下,哈哈。。。。。

小甲鱼 发表于 2012-12-22 18:10:02

lyoal 发表于 2012-12-22 15:45 static/image/common/back.gif
自己解决了,谢谢自己一下,哈哈。。。。。

{:5_109:}这么快自食其力啦~

lyoal 发表于 2012-12-22 20:35:10

小甲鱼 发表于 2012-12-22 18:10 static/image/common/back.gif
这么快自食其力啦~

:lol回头调示了一下,一不小心成了。谋事在人,成事在天啊

lyoal 发表于 2012-12-22 20:36:35

本帖最后由 lyoal 于 2012-12-22 20:39 编辑

wawa 发表于 2012-12-22 15:12 static/image/common/back.gif
兄弟,你进步神速啊,自己解决了,你分给谁啊,可是给不了自己的哦,上次在我求助帖里我可是帮你解决一些问 ...
Assume cs:code
data segment
      db '9,8,7,4,2,0',0
data ends

code segment
start:
      
      mov ax,data
      mov ds,ax
      mov si,0

      mov ax,0b800h
      mov es,ax
      mov di,160*12+36*2
      mov bl,2
      mov cx,6
      sub ax,ax
s:      push cx
      mov al,
      add al,30h
      out 70h,al                ;对CMOS RAM端口进行读写操作
      in al,71h
      mov ah,al
      mov cl,4
      shr ah,cl
      and al,00001111b
      
      add ah,30h                ;将数字转换成字符
      add al,30h
      
      mov byte ptr es:,ah
      mov byte ptr es:,bl
      mov byte ptr es:,al
      mov byte ptr es:,bl
      inc si
      add di,4
      
      pop cx
      loop s
      
ok:      mov ax,4c00h
      int 21h
      
      code ends
end start给你,不能白给,帮忙指点一下这个问题,呵呵。。。。
这段代码,我想实现,循环读取CMOS RAM中的年月日时分秒。整了两小时了,没搞出来,帮忙指点一下撒。
鱼C老师能光顾咱的贴子,三生有幸啊,呵呵。。。。。您老如有时间望也能不吝指点一下迷津。
感谢各位大牛!THKS V M!

wawa 发表于 2012-12-22 21:38:59

{:1_1:}20~23行代码有误,数据段定义有误,你想把cmos地址放在数据段中应该表示为db 9,8,7,4,2,0,干嘛要用字符串,数值加30h变字符 你的第21行代码,应该是减30h吧,你想把字符变数值吧,你字符串里还有逗号,20行 在第二次循环里,你把逗号传给al 然后out 70h,al 肯定出错啊,正确答案我想你有吧 我就不发了

lyoal 发表于 2012-12-22 21:48:15

wawa 发表于 2012-12-22 21:38 static/image/common/back.gif
20~23行代码有误,数据段定义有误,你想把cmos地址放在数据段中应该表示为db 9,8,7,4,2,0,干嘛要用 ...

Assume cs:code
data segment
        db '987420'
data ends

code segment
start:
       
        mov ax,data
        mov ds,ax
        mov si,0

        mov ax,0b800h
        mov es,ax
        mov di,160*12+36*2
        mov bl,2
        mov cx,6
        sub ax,ax
s:        push cx
        mov al,
        sub al,30h
        out 70h,al                ;对CMOS RAM端口进行读写操作
        in al,71h
        mov ah,al
        mov cl,4
        shr ah,cl
        and al,00001111b
       
        add ah,30h                ;将数字转换成字符
        add al,30h
       
        mov byte ptr es:,ah
        mov byte ptr es:,bl
        mov byte ptr es:,al
        mov byte ptr es:,bl
        inc si
        add di,4
       
        pop cx
        loop s
       
ok:        mov ax,4c00h
        int 21h
       
        code ends
end start
        非常感谢兄弟的指点,确实是要减30h,我之前减过一次,没成功,可能就出在数据段定义中的豆号的原因。GODD,THKS.
贴出来跟大家分享一下下。呵呵
大牛勿喷

落叶无痕 发表于 2013-4-24 21:14:54

来看看呵呵
页: [1]
查看完整版本: 十三章实验题 求大牛指点一下,代码中还需要修改那些地方?