人造人 发表于 2017-3-24 12:26:47

wyuri 发表于 2017-3-24 00:15
不用了,谢了,知道怎么弄了显示了

wyuri 发表于 2017-3-24 17:51:25

本帖最后由 wyuri 于 2017-3-24 17:53 编辑

人造人 发表于 2017-3-24 12:26


小甲鱼的答案有问题,您看一下
王爽汇编第十章实验十(1)
另 我不明白的是,按照他的路子走程序显示应该是第九行,但是却在第七行,您看看怎么回事,我也研究研究

wyuri 发表于 2017-3-24 18:23:26

人造人 发表于 2017-3-24 12:26


这是小甲鱼的答案图片

人造人 发表于 2017-3-24 19:22:00

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

把代码贴出来

wyuri 发表于 2017-3-24 19:34:39

本帖最后由 wyuri 于 2017-3-24 19:40 编辑

人造人 发表于 2017-3-24 19:22
把代码贴出来

这是小甲鱼的
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,

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

   mov es:,ch

   mov es:.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

wyuri 发表于 2017-3-24 19:36:55

本帖最后由 wyuri 于 2017-3-24 19:38 编辑

人造人 发表于 2017-3-24 19:22
把代码贴出来

还有自己的要疯掉了,我检查不出来 哪里有毛病,您帮我看看   我的在显示器的效果明天发给你今天发图上限了
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,
          mov ch,0
          jcxz s
          mov es:,cl
          mov es:1,bl
          inc si
          add di,2
          jmp ok
       s:
          ret
         
         
code ends
end start

人造人 发表于 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,
        jcxz s
       
        mov es:, cl
        mov es:1, bl

        inc si
        add di, 2

        jmp ok
s:
        ret

code ends
end start

人造人 发表于 2017-3-24 22:13:55

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

^_^


wyuri 发表于 2017-3-26 23:33:47

人造人 发表于 2017-3-24 22:13
^_^

他就是个名字,他是abc也好,我已经指给ds了,所以这个真的真的有关系么( ^_^ )

wyuri 发表于 2017-3-26 23:38:30

人造人 发表于 2017-3-24 22:10


还有   我给您的程序 是我自己的   我不知道哪里逻辑上错了,我得到的效果不对,还有 我说小甲鱼的第一个程序有问题,您看看,他忘记8减去1了,还有3也要减去1
我的减了,但是效果不对

wyuri 发表于 2017-3-26 23:43:38

人造人 发表于 2017-3-24 22:10


然后我还有问题
就是第十章实验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,
       div cx
       mov cx,dx
       pop dx
       ret
code ends
end start
      
      

人造人 发表于 2017-3-26 23:50:51

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

第9行
没有问题呀

人造人 发表于 2017-3-26 23:52:02

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

单步调试程序^_^

wyuri 发表于 2017-3-27 13:05:23

人造人 发表于 2017-3-26 23:52
单步调试程序^_^

好的,对,
还有一个我自己真解决不了了,就是我能在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,
       mov ch,0
       jcxz s2
       mov es:,cl
       mov es:1,bl
       inc si
       add di,2
       jmp s3
      
   s2: ret
   
code ends
end start

人造人 发表于 2017-3-27 13:39:34

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

第8行,没有问题

顺便说一下
右键->标记
这样更方便数行数^_^

wyuri 发表于 2017-4-4 12:22:35

人造人 发表于 2017-3-27 13:39
第8行,没有问题

顺便说一下


这个我不会弄,你是怎么操作能让cmd显示的,我的是64位,也有个32位的本,但是都显示不出来,您能教教我么?
对了,还有个问题要问您,是第十二章的单步中断问题

人造人 发表于 2017-4-4 12:50:42

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

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

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

wyuri 发表于 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 ,0
       mov word ptr 2,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,
       mov ch,0
       jcxz ok
       inc bx                                                                            确定字符长度
       inc si
       jmp s
      
   ok: mov cx,bx
       pop si
ok1: mov al,
       mov es:,al
       mov byte ptr es:1,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,
       mov ch,0
       jcxz ok                                                             确定字符 长度
       inc bx
       inc si
       jmp s
      
   ok: mov cx,bx
       pop si
ok1: mov al,
       mov es:,al
       mov byte ptr es:1,2
       inc si
       add di,2
       loop ok1
      
       mov ax,4c00h
       int 21h
do0end: nop

code ends
end do0

人造人 发表于 2017-4-4 15:04:17

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

程序没有问题,关掉DOSBox 重新开一下试试

wyuri 发表于 2017-4-6 14:11:26

人造人 发表于 2017-4-4 15:04
程序没有问题,关掉DOSBox 重新开一下试试

还是 不行,都操作过了,感觉是我程序的问题,可我就是找不出来哪里的问题,可能是我能力有限找的费劲,我再努努力试试,如果您有时间的情况下可以帮我看看,没时间不回答就行^_^
页: 1 2 3 4 5 6 7 [8] 9 10 11
查看完整版本: 王爽汇编问题