关于 程序加载时cx的值
《汇编语言》中4.9说,Debug将程序从加载入内存之后,CX存放的是程序的长度。我想问问,如果通过其它方式将程序从加载入内存之后,CX的值是多少? 我写了一个将CX放入显存的程序,但是在执行程序的时候,并没有将程序的长度显示出来。 所以,问题来了,通常情况下将程序从加载入内存之后,CX的值是多少?
附测试程序:
assume cs:code
code segment
start:
mov ax,0b800h
mov ds,ax
mov bx,07b8h
mov,cl
mov dl,24h
mov ,dl
mov ax,4c00h
int 21h
code ends
end start
最后的显示: mov ax, '0' 和 mov ax, 0 是不一样的
需要把ASCII码写到显存才能显示
建议百度:ASCII
人造人 发表于 2017-6-21 23:03
mov ax, '0' 和 mov ax, 0 是不一样的
需要把ASCII码写到显存才能显示
建议百度:ASCII
我找了相应的ASCII码对应的符号,可是还是没有显示程序的长度,显示的都是一个内容。难度通过其它方式将程序从加载入内存之后,CX是0,并没有被赋予程序长度? 3-3 发表于 2017-6-22 08:53
我找了相应的ASCII码对应的符号,可是还是没有显示程序的长度,显示的都是一个内容。难度通过其它方式将 ...
需要把cx的值转换成对应的ASCII才行 人造人 发表于 2017-6-22 12:42
需要把cx的值转换成对应的ASCII才行
这里,我问的问题是在其它方式将程序加载入内存后的CX值,不小心被带歪了{:5_107:}
那我就先按版主给出的答案,再写一个调试的程序:
assume cs:code
code segment
start:
mov ax,0b800h
mov ds,ax
mov bx,07b8h
mov,cl
mov dl,24h
mov ,dl
mov al,1ch ;整个代码的长度是1c,也就是说,在用debug将程序加载进内存时,cx=1ch,这里我就再赋值一次,看看两次内容是否相同。
mov ,al
mov ,dl
mov ax,4c00h
int 21h
code ends
end start
程序运行后的结果显示,CX的内容不是001CH。
3-3 发表于 2017-6-22 13:02
这里,我问的问题是在其它方式将程序加载入内存后的CX值,不小心被带歪了
这个图片,这段代码,应该可以解决你的疑问了
assume cs:code
code segment
start:
mov ax, 0b800h
mov es, ax
mov ax, cx
and ax, 00f0h
push cx
mov cl, 4
shr ax, cl
pop cx
cmp ax, 10
jge @f
add ax, '0'
mov byte ptr es:, al
jmp next
@@:
sub ax, 10
add ax, 'A'
mov byte ptr es:, al
next:
mov ax, cx
and ax, 000fh
cmp ax, 10
jge @f
add ax, '0'
mov byte ptr es:, al
jmp next
@@:
sub ax, 10
add ax, 'A'
mov byte ptr es:, al
mov ax,4c00h
int 21h
code ends
end start
人造人 发表于 2017-6-22 13:34
这个图片,这段代码,应该可以解决你的疑问了
真棒!
页:
[1]