关于计算机对ASCII码存储和使用的一个问题
在看汇编的视频时偶然想到的,或许是由于基础知识太少,此问题思考许久,不得答案。在网上查,却也不知应该怎么搜索。也未搜索到相关的资料。特此请教大家。
下面入正题:
书上讲任何字符在计算机中都有个编码,用以存储数据。(这里就具体到ASCII码来讲)。
当我们让电脑(以8位机为例)计算1+1时,
它是计算的0000 0001+0000 0001呢,
还是计算的ASCII中的00110001+00110001呢?
因为我们输入的操作数1,对于用ASCII存储的电脑来说,不是00110001吗?
所以我一直搞不懂,它真正操作的是哪个数。
真诚请教,非常感谢。 按照你的理解,计算的应该是 0000 0001+0000 0001
请看下面的程序
输入 2 空格 3
assume cs:code, ds:data, ss:stack
stack segment
db 100h dup (0)
stack_top:
stack ends
data segment
num0 db 0
num1 db 0
data ends
code segment
start:
mov ax, stack
mov ss, ax
mov sp, stack_top
mov ax, data
mov ds, ax
mov ax, 0b800h
mov es, ax
mov ah, 01h
int 21h ; 键盘中断,读取一个字符
sub al, '0' ; 从键盘读取到的是字符,字符减 ‘0’,也就是减 30h,转换成数字
mov byte ptr , al ; 被加数
mov ah, 01h
int 21h ; 键盘中断,读取一个字符(空格),直接忽略
mov ah, 01h
int 21h ; 键盘中断,读取一个字符
sub al, '0' ; 从键盘读取到的是字符,字符减 ‘0’,也就是减 30h,转换成数字
mov byte ptr , al ; 加数
mov al, byte ptr
add al, byte ptr ; 被加数 + 加数,现在 ax 中是两个数的和
add al, '0' ; 把这个和加 ‘0’,也就是加 30h,转换成字符,用于下面显示
mov ah, 07h ; 字符属性
mov es:, ax
mov ax, 4c00h
int 21h
code ends
end start
注释部分好不整齐 ^_^
我的代码长这样,复制过来就成上面那样了
^_^
人造人 发表于 2018-3-3 08:19
注释部分好不整齐 ^_^
谢谢,能看懂您的意思。之前一直疑惑了很久,猜测会做这样的减法处理,但是只能胡乱猜,远不如您这个图来得肯定。
非常感谢。 nonepeople 发表于 2018-3-3 20:14
谢谢,能看懂您的意思。之前一直疑惑了很久,猜测会做这样的减法处理,但是只能胡乱猜,远不如您这个图来 ...
^_^ nonepeople 发表于 2018-3-3 20:14
谢谢,能看懂您的意思。之前一直疑惑了很久,猜测会做这样的减法处理,但是只能胡乱猜,远不如您这个图来 ...
注释忘记改了,应该是; 被加数 + 加数,现在 al 中是两个数的和
希望没有造成误解
^_^
页:
[1]