注册 登录
编程论坛 汇编论坛

几个小问题,大神快快出现

阔怀 发布于 2015-04-29 20:51, 4718 次点击
我是初学者,如何将键入的字(ascii码)转成10进制数值来算(有没有办法直接键入的数字直接算)???又如何将10进制数显示出来(而不是用ascii码显示)???如何求绝对值???另外。re db 24h,58h                    ll db 24,-12,56这些是什么意思????
急救,大神快快出现。。。。
9 回复
#2
wmf20142015-04-29 21:48
不知道你要表述什么。你得有代码啊,比如你怎样取得键入的asc码。
#3
取名字2015-04-29 23:33
对于楼主依稀描述的几个问题:
1、将键入的字(应该是数字吧)转换为十进制数值。因为数字的ASCII码与实际的数值相差30H,所以可以用输入的数字的ASCII码-30H就可以得到十进制数值;
2、而要将十进制数显示出来,则又必须将十进制数+30H,转化为数字对应的ASCII码,才能显示,因为显卡的显示原理就是这样的:要想让显示器显示某个内容,就必须向显卡的显存提供相对应的ASCII码。如你要显示数字“3”,先将3+30H,得到33H,这就是数字3的ASCII码,然后将该ASCII码输入至显卡显存,从而就可在屏幕上显示出数字“3”;
3、求绝对值,可以先判断该数值的符号位,符号位为0,则绝对值就是其本身代表的数值,如果符号位为1,表示该数是负数,可使用NEG命令(NEG命令对二进制各位求反并加1),这样得到的就是该负数的绝对值;
4、“re db 24h,58h”这是定义了2个字节数据。“db”表示定义的是字节数据,“24H,58H”分别是2个字节的值,“re”是一个标号,既表示单元地址,又表示单元的长度,这里的长度不是说后面定义了几个数据项,而是指在该标号处的内存单元类型:是字节单元还是字单元,或者是双字单元。正因为“re”标号既表示地址,又表示单元的长度,所以“re”就代表一个内存单元,“mov al,re”实际上就是把re所代表内存单元中的数据传送至寄存器al中。

[ 本帖最后由 取名字 于 2015-4-30 06:40 编辑 ]
#4
阔怀2015-05-05 10:29
回复 3楼 取名字
对于第四个答案我不是很懂,前三个就比较清楚。谢谢啊,第四个能不能再帮我讲解一下,另外对于把Ax的值保存到某个变量(如save),变量怎么定义,怎么存,怎么查找看看有没有存进去?????大神,救我!!!
#5
取名字2015-05-05 12:51
    第4个问题涉及到汇编语言中数据定义的问题。最初我们在数据段中这样定义数据:
    db    1    ;db是define byte的缩写,即定义字节,这句向系统申请了一个字节的内存单元空间,并向里面存储了数字1,也可以说是定义一个数据,类型为字节,值为1。
    dw    ?    ;dw是define word的缩写,即定义字,这句向系统申请2个字节的内存单元空间,但未向里面存储内容(用高级语言的术语说就是未赋初值),也可以说是定义了一个数据,类型为字,但未赋值。
    然后我们也可以这样定义数据:
    VAR1    db    1        ;用汇编语言的术语讲,VAR1就是一个标号,标号其实就是一个地址,但在这里,VAR1这个标号不但表示地址,还表示了后面所申请内存单元的长度,所以VAR1实际上就表示DS:[VAR1],即通过VAR1就可以访问到它所指代的内存单元中的内容,也即VAR1=1。在高级语言里,VAR1就是程序定义的变量,初值为1,我们可以像下面这样来使用VAR1:
    mov    al,VAR1        ;将VAR1所指代的内存单元中的内容传送至al寄存器中,用高级语言的术语说就是将变量VAR1的值赋给al。
    mov    VAR1,al        ;将寄存器al中的值传送至VAR1所指代的内存单元中,用高级语言的术语说就是将al的值赋给变量VAR1。
    根据以上的分析,我们就可以这样来理解下面的一些语句:
    VAR2    dw    3        ;定义了一个字型变量VAR2,值为3。
    VAR3    db    1,2,3    ;定义了一个字节型的数组,有3个元素,每个元素的值分别为1,2,3。
    VAR4    dw    ?        ;定义了一个字型变量VAR4,未赋初值。

    以上包括了变量的定义和使用,如果要查看变量中的值,可用DEBUG加载程序,用D命令查看。
    不知道以上分析能否帮到楼主。

[ 本帖最后由 取名字 于 2015-5-5 12:52 编辑 ]
#6
zklhp2015-05-05 13:05
以下是引用取名字在2015-5-5 12:51:02的发言:

    第4个问题涉及到汇编语言中数据定义的问题。最初我们在数据段中这样定义数据:
    db    1    ;db是define byte的缩写,即定义字节,这句向系统申请了一个字节的内存单元空间,并向里面存储了数字1,也可以说是定义一个数据,类型为字节,值为1。
    dw    ?    ;dw是define word的缩写,即定义字,这句向系统申请2个字节的内存单元空间,但未向里面存储内容(用高级语言的术语说就是未赋初值),也可以说是定义了一个数据,类型为字,但未赋值。
    然后我们也可以这样定义数据:
    VAR1    db    1        ;用汇编语言的术语讲,VAR1就是一个标号,标号其实就是一个地址,但在这里,VAR1这个标号不但表示地址,还表示了后面所申请内存单元的长度,所以VAR1实际上就表示DS:[VAR1],即通过VAR1就可以访问到它所指代的内存单元中的内容,也即VAR1=1。在高级语言里,VAR1就是程序定义的变量,初值为1,我们可以像下面这样来使用VAR1:
    mov    al,VAR1        ;将VAR1所指代的内存单元中的内容传送至al寄存器中,用高级语言的术语说就是将变量VAR1的值赋给al。
    mov    VAR1,al        ;将寄存器al中的值传送至VAR1所指代的内存单元中,用高级语言的术语说就是将al的值赋给变量VAR1。
    根据以上的分析,我们就可以这样来理解下面的一些语句:
    VAR2    dw    3        ;定义了一个字型变量VAR2,值为3。
    VAR3    db    1,2,3    ;定义了一个字节型的数组,有3个元素,每个元素的值分别为1,2,3。
    VAR4    dw    ?        ;定义了一个字型变量VAR4,未赋初值。

    以上包括了变量的定义和使用,如果要查看变量中的值,可用DEBUG加载程序,用D命令查看。
    不知道以上分析能否帮到楼主。

回答好认真
#7
取名字2015-05-05 15:19
谢谢zklhp版主的夸奖。
#8
阔怀2015-05-05 18:08
回复 7楼 取名字
大概懂了,谢谢你啦,表示欣赏你的为人!!!!!
#9
取名字2015-05-05 21:08
以下是引用阔怀在2015-5-5 18:08:21的发言:

大概懂了,谢谢你啦,表示欣赏你的为人!!!!!
谢谢楼主的赞赏!
#10
万万切克闹2015-06-11 00:33
回复 3楼 取名字
data segment
     f1 db 1
     f2 db 2
data  ends
code segment
     assume cs:code,ds:data
start: mov ax,data
       mov ds,ax
       xor ax,ax
       add ax,f1
       add ax,f2
       mov dx,ax
       mov ah,2
       int 21h
       mov ah,4ch
       int 21h
code ends
     end start
怎么通过 f1f2让1和2相加呢??上面程序是错误的 求教啊
1