鱼C论坛

 找回密码
 立即注册
楼主: wyuri

王爽汇编问题

[复制链接]
发表于 2017-3-24 12:26:47 | 显示全部楼层
wyuri 发表于 2017-3-24 00:15
不用了,谢了,  知道怎么弄了  显示了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-24 17:51:25 | 显示全部楼层
本帖最后由 wyuri 于 2017-3-24 17:53 编辑


小甲鱼的答案有问题,您看一下
王爽汇编第十章实验十(1)
另 我不明白的是,按照他的路子走程序显示应该是第九行,但是却在第七行,您看看怎么回事,我也研究研究
问题15.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-24 18:23:26 | 显示全部楼层

这是小甲鱼的答案图片
QQ截图20170324181343副本.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-24 19:22:00 | 显示全部楼层
wyuri 发表于 2017-3-24 17:51
小甲鱼的答案有问题,您看一下
王爽汇编第十章实验十(1)
另 我不明白的是,按照他的路子走程序显示 ...

把代码贴出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-24 19:34:39 | 显示全部楼层
本帖最后由 wyuri 于 2017-3-24 19:40 编辑


这是小甲鱼的
assume cs:code,ds:data

data segment

     db 'welcome to masm!',0

data ends

code segment

start:   mov dh,8

     mov dl,3

     mov cl,2

     mov ax,data

     mov ds,ax

     mov si,0

     call show_str



     mov ax,4c00h

     int 21h



;名称:show_str

;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。

;参数:(dh)=行号(取值范围0~24);

;      (dl)=列号(取值范围0~79);

;      (cl)=颜色;

;      ds:si指向字符串的首地址。

;返回:无。

show_str:

push ax

     push bx

     push es

     push si

     mov ax,0b800h

     mov es,ax

     mov ax,160

     mul dh

     mov bx,ax ;bx=160*dh

     mov ax,2

     mul dl        ;ax=dl*2

     add bx,ax     ;mov bx,(160*dh+dl*2)设置es:bx指向显存首地址

     mov al,cl     ;把颜色cl赋值al

     mov cl,0

show0:

     mov ch,[si]

     jcxz show1    ;(ds:si)=0时,转到show1执行   

     mov es:[bx],ch

     mov es:[bx].1,al

     inc si        ;ds:si指向下一个字符地址

     add bx,2      ;es:bx指向下一个显存地址

     jmp show0

show1:

     pop si

     pop es

     pop bx

     pop ax

     ret



code ends

end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-24 19:36:55 | 显示全部楼层
本帖最后由 wyuri 于 2017-3-24 19:38 编辑


还有自己的要疯掉了,我检查不出来 哪里有毛病,您帮我看看   我的在显示器的效果明天发给你今天发图上限了
assume cs:code
date segment
  db 'welcome to masm!'
date ends

code segment
start: mov dh,8
       mov dl,3
       mov cl,2
       mov ax,date
       mov ds,ax
       mov si,0
       call show_str
      
       mov ax,4c00h
       int 21h
show_str: mov ax,0b800h
          mov es,ax     
          mov al,dh
          mov ah,0
          sub ax,1
          mov bx,160            
          mul bx                  
          mov di,ax
          mov al,dl
          mov ah,0
          sub al,1
          mov bl,2
          mul bl                  
          add di,ax               
         
          mov bl,cl

      ok: mov cl,[si]
          mov ch,0
          jcxz s
          mov es:[di],cl
          mov es:1[di],bl
          inc si
          add di,2
          jmp ok
       s:
          ret
         
         
code ends
end start
QQ截图20170324185625副本.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-24 22:10:17 | 显示全部楼层
wyuri 发表于 2017-3-24 19:36
还有自己的要疯掉了,我检查不出来 哪里有毛病,您帮我看看   我的在显示器的效果明天发给你今天发图上 ...
assume cs:code
date segment
        db 'welcome to masm!', 0  ;以0结尾
date ends

code segment
start:
        mov dh, 8
        mov dl, 3
        mov cl, 2
        mov ax, date
        mov ds, ax
        mov si, 0
        call show_str
       
       mov ax, 4c00h
       int 21h

;名称:show_str
;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。
;参数:(dh)=行号(取值范围0~24);
;      (dl)=列号(取值范围0~79);
;      (cl)=颜色;
;      ds:si指向字符串的首地址。
;返回:无。

show_str:

        mov ax, 0b800h
        mov es, ax
        
        mov al, dh
        mov ah, 0
        sub ax, 1
        mov bx, 160    

        push dx  ; mul指令改变了 dx
        
        mul bx
        
        pop dx
        
        mov di, ax
        
        mov al, dl
        mov ah, 0
        sub al, 1
        
        mov bl, 2
        
        push dx
        
        mul bl
        
        pop dx
        
        add di, ax

        mov bl, cl
        mov ch, 0
ok:
        mov cl, [si]
        jcxz s
        
        mov es:[di], cl
        mov es:1[di], bl

        inc si
        add di, 2

        jmp ok
s: 
        ret

code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-24 22:13:55 | 显示全部楼层
wyuri 发表于 2017-3-24 19:36
还有自己的要疯掉了,我检查不出来 哪里有毛病,您帮我看看   我的在显示器的效果明天发给你今天发图上 ...

^_^
无标题.png
date.png
data.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-26 23:33:47 | 显示全部楼层

他就是个名字,他是abc也好,我已经指给ds了,所以这个真的真的有关系么( ^_^ )
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-26 23:38:30 | 显示全部楼层

还有   我给您的程序 是我自己的   我不知道哪里逻辑上错了,我得到的效果不对,还有 我说小甲鱼的第一个程序有问题,您看看,他忘记8减去1了,还有3也要减去1
我的减了,但是效果不对
QQ截图20170324193237.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-26 23:43:38 | 显示全部楼层

然后我还有问题
就是第十章实验10  问题2关于除法溢出
我做得有些麻烦,不知道哪里逻辑错了,就是显示不出来,按G没有结果
assume cs:code
stack segment
   dw 8 dup (0)
stack ends
code segment
start: mov ax,4240h
       mov dx,0fh
       mov cx,0ah
       call divdw
      
       mov ax,4c00h
       int 21h
      
divdw: push ax
       mov ax,stack
       mov ss,ax
       mov sp,16
       mov ax,dx
       mov dx,0
       div cx
       push ax
       mov bp,sp
       sub bp,2
       mov ax,[bp]
       div cx
       mov cx,dx
       pop dx
       ret
code ends
end start
      
      
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-26 23:50:51 | 显示全部楼层
wyuri 发表于 2017-3-26 23:38
还有   我给您的程序 是我自己的   我不知道哪里逻辑上错了,我得到的效果不对,还有 我说小甲鱼的第一个 ...

第9行
没有问题呀
无标题.png
无标题1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-26 23:52:02 | 显示全部楼层
wyuri 发表于 2017-3-26 23:43
然后我还有问题
就是第十章实验10  问题2关于除法溢出
我做得有些麻烦,不知道哪里逻辑错了,就是显示 ...

单步调试程序^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-27 13:05:23 | 显示全部楼层

好的,对,
还有一个我自己真解决不了了,就是我能在debug里显示列数,但是显示行数却不是准确的,因为操作行数就一直在混动,所以我想请您帮我把这个程序放您电脑里显示一下,究竟是不是第八行

assume cs:code
data segment
   db 'Welcome to masm!',0
data ends

code segment
start: mov dh,8
       mov dl,3
       mov cl,2
       mov ax,data
       mov ds,ax
       mov si,0
       call show_str
      
       mov ax,4c00h
       int 21h
      
show_str:
       mov ax,0b800h
       mov es,ax
       mov di,0
       sub dh,1
       mov al,160
       mov ah,0
       mul dh
       push ax
       sub dl,1
       mov al,2
       mov ah,0
       mul dl
       pop bx
       add ax,bx
       mov di,ax
       mov bl,cl
   
   s3: mov cl,[si]
       mov ch,0
       jcxz s2
       mov es:[di],cl
       mov es:1[di],bl
       inc si
       add di,2
       jmp s3
      
   s2: ret
   
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-27 13:39:34 | 显示全部楼层
wyuri 发表于 2017-3-27 13:05
好的,对,
还有一个我自己真解决不了了,就是我能在debug里显示列数,但是显示行数却不是准确的,因为 ...

第8行,没有问题

顺便说一下
右键->标记
这样更方便数行数^_^
无标题.png
无标题1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-4 12:22:35 | 显示全部楼层
人造人 发表于 2017-3-27 13:39
第8行,没有问题

顺便说一下

这个我不会弄,你是怎么操作能让cmd显示的,我的是64位,也有个32位的本,但是都显示不出来,您能教教我么?
对了,还有个问题要问您,是第十二章的单步中断问题
问题16.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-4 12:50:42 | 显示全部楼层
wyuri 发表于 2017-4-4 12:22
这个我不会弄,你是怎么操作能让cmd显示的,我的是64位,也有个32位的本,但是都显示不出来,您能教教我 ...

debug 可以修改位于堆栈上的单步中断标志

目前你可以这样理解,事实上不是这样的,你学到后面就会明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-4 14:39:35 | 显示全部楼层
本帖最后由 wyuri 于 2017-4-4 14:45 编辑
人造人 发表于 2017-4-4 12:50
debug 可以修改位于堆栈上的单步中断标志

目前你可以这样理解,事实上不是这样的,你学到后面就会明白 ...


还有12章实验题,我正常不用字符后为0的时候查出cx的长度,操作显示正常。但是用字符后为0 的时候操作显示就不正常,然后我把do0单独提出来操作还是显示正常,我无法单步调试找出问题。您看看是怎么回事

第一个程序
assume cs:code
code segment
start: mov ax,cs
       mov ds,ax
       mov si,offset do0
       mov ax,20h
       mov es,ax
       mov di,0                                                                        安装
       mov cx,offset do0end-offset do0
       cld
       rep movsb
      
       mov ax,0
       mov ds,ax
       mov si,0                                                                         设置向量表                                    
       mov word ptr [si],0
       mov word ptr 2[si],20h
      
       mov ax,4c00h
       int 21h
      
  do0: jmp do0begin
       db "divide error!",0
do0begin:
       mov ax,20h
       mov ds,ax
       mov si,2
       mov ax,0b800h                                                             安装的程序
       mov es,ax
       mov di,11*160+25*2
      
       push si
    s: mov cl,[si]
       mov ch,0
       jcxz ok
       inc bx                                                                            确定字符长度
       inc si
       jmp s
      
   ok: mov cx,bx
       pop si
  ok1: mov al,[si]
       mov es:[di],al
       mov byte ptr es:1[di],2
       inc si
       add di,2
       loop ok1
      
       mov ax,4c00h
       int 21h
do0end: nop

code ends
end start      
      
      
第二个程序
assume cs:code
code segment
  do0: jmp do0begin
       db "divide error!",0
do0begin:
       mov ax,cs
       mov ds,ax
       mov si,2
       mov ax,0b800h                                               单独提出安装的程序
       mov es,ax
       mov di,11*160+25*2
      
       push si
    s: mov cl,[si]
       mov ch,0
       jcxz ok                                                             确定字符 长度
       inc bx
       inc si
       jmp s
      
   ok: mov cx,bx
       pop si
  ok1: mov al,[si]
       mov es:[di],al
       mov byte ptr es:1[di],2
       inc si
       add di,2
       loop ok1
      
       mov ax,4c00h
       int 21h
do0end: nop

code ends
end do0  

问题17.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-4 15:04:17 | 显示全部楼层
wyuri 发表于 2017-4-4 14:39
还有12章实验题,我正常不用字符后为0的时候查出cx的长度,操作显示正常。但是用字符后为0 的时候操作 ...

程序没有问题,关掉DOSBox 重新开一下试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-6 14:11:26 | 显示全部楼层
人造人 发表于 2017-4-4 15:04
程序没有问题,关掉DOSBox 重新开一下试试

还是 不行,都操作过了,感觉是我程序的问题,可我就是找不出来哪里的问题,可能是我能力有限找的费劲,我再努努力试试,如果您有时间的情况下可以帮我看看,没时间不回答就行^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-6 13:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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