wyuri 发表于 2017-3-24 00:15
不用了,谢了,知道怎么弄了显示了
哦				
			
		 本帖最后由 wyuri 于 2017-3-24 17:53 编辑 
人造人 发表于 2017-3-24 12:26
哦
小甲鱼的答案有问题,您看一下
王爽汇编第十章实验十(1)
另 我不明白的是,按照他的路子走程序显示应该是第九行,但是却在第七行,您看看怎么回事,我也研究研究
				
			
		人造人 发表于 2017-3-24 12:26
哦
这是小甲鱼的答案图片				
			
		wyuri 发表于 2017-3-24 17:51
小甲鱼的答案有问题,您看一下
王爽汇编第十章实验十(1)
另 我不明白的是,按照他的路子走程序显示 ...
把代码贴出来
				
			
		 本帖最后由 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: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
				
			
		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
				
			
		wyuri 发表于 2017-3-24 19:36
还有自己的要疯掉了,我检查不出来 哪里有毛病,您帮我看看   我的在显示器的效果明天发给你今天发图上 ...
^_^
				
			
		人造人 发表于 2017-3-24 22:13
^_^
他就是个名字,他是abc也好,我已经指给ds了,所以这个真的真的有关系么( ^_^ )				
			
		人造人 发表于 2017-3-24 22:10
还有   我给您的程序 是我自己的   我不知道哪里逻辑上错了,我得到的效果不对,还有 我说小甲鱼的第一个程序有问题,您看看,他忘记8减去1了,还有3也要减去1
我的减了,但是效果不对				
			
		人造人 发表于 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
       
       				
			
		wyuri 发表于 2017-3-26 23:38
还有   我给您的程序 是我自己的   我不知道哪里逻辑上错了,我得到的效果不对,还有 我说小甲鱼的第一个 ...
第9行
没有问题呀
				
			
		wyuri 发表于 2017-3-26 23:43
然后我还有问题
就是第十章实验10问题2关于除法溢出
我做得有些麻烦,不知道哪里逻辑错了,就是显示 ...
单步调试程序^_^				
			
		人造人 发表于 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				
			
		wyuri 发表于 2017-3-27 13:05
好的,对,
还有一个我自己真解决不了了,就是我能在debug里显示列数,但是显示行数却不是准确的,因为 ...
第8行,没有问题
顺便说一下
右键->标记
这样更方便数行数^_^
				
			
		人造人 发表于 2017-3-27 13:39
第8行,没有问题
顺便说一下
这个我不会弄,你是怎么操作能让cmd显示的,我的是64位,也有个32位的本,但是都显示不出来,您能教教我么?
对了,还有个问题要问您,是第十二章的单步中断问题				
			
		wyuri 发表于 2017-4-4 12:22
这个我不会弄,你是怎么操作能让cmd显示的,我的是64位,也有个32位的本,但是都显示不出来,您能教教我 ...
debug 可以修改位于堆栈上的单步中断标志
目前你可以这样理解,事实上不是这样的,你学到后面就会明白
				
			
		 本帖最后由 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
				
			
		wyuri 发表于 2017-4-4 14:39
还有12章实验题,我正常不用字符后为0的时候查出cx的长度,操作显示正常。但是用字符后为0 的时候操作 ...
程序没有问题,关掉DOSBox 重新开一下试试				
			
		人造人 发表于 2017-4-4 15:04
程序没有问题,关掉DOSBox 重新开一下试试
还是 不行,都操作过了,感觉是我程序的问题,可我就是找不出来哪里的问题,可能是我能力有限找的费劲,我再努努力试试,如果您有时间的情况下可以帮我看看,没时间不回答就行^_^