人造人
发表于 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