HLA 第二章 数据表示

1,默认情况下,当调用stdout.put进程时候,HLA以十六进制数字系统显示所有的字节,字,双字,

      同样,hla也以十六进制显示所有    寄存器  数值。

十进制到十六进制转换

 program  converttohex;

 #include("stdlib.hhf")

static

    value: int32;

begin  converttohex;

    stdout.put("input a decimal value:");

   stdin.get(value);

    mov (value,eax);

    stdout.put(" the value",value,"converttohex is $",eax,nl);

end converttohex;

十六进制到十进制的转换

program converttodecimal;

#include("stdlib.hhf")

static

    value: int32;

begin converttodecimal;

    stdout.put(" please input a hex value:");

    stdin.get(ebx);

    mov(ebx,value);

   stdout.put("the value $",ebx,"convert to decimal is ",value,nl);

end converttodecimal;

注意 一下   寄存器  和变量 

。。。。。。。。。。。。。。。。。。。。。

stdout.put历程选择了十进制作为int8,int16,int32  变量  的默认输出,但是并不意味着这些变量会保存十进制数,记住  寄存器和存储器保存的是数值,而不是十六进制数或者十进制数值,stdout.put会将这些数值转换成串,并输出得到结果串。。。

如果按需要按十进制输出寄存器变量,,那么调用putiX就可以了,,,,putiX()输出结果总是十进制的。

stdin.getiX  默认输入也是十进制

如果想按照十六进制输入一个或者输出以个int8,int16,int32类型的变量,那么调用stdout.puthX就可以了,stdin.gethX     ,,,把他们默认返回到ax寄存器中  

program hexIO

#inclcude("stdlib.hhf")

staic

   i32:int32;

begin HEXIO;

  stdout.put("please  enter ahex value");

  stdin.geth32();

 mov (eax,i32);

stdout.put("  nin shu ru de  zhi  shi  $ :);

stdout.puth32(i32);

stdout.newln();

end hexIO;

 

 1:and(source ,dest);
 or(source,dest);
 xor(source,dest);源操作数与目的操作数长度必须相同,并且不能都为存储器操作数
2:我们不能对最小的数再取负
3:not是非  neg是取负
4;符号扩展指令
program haha;
#include("stdilb.hhf")
static
   i8:    int8;
   i16:   int16;
   i32:   int32;
begin haha;
   stdout.put("enter a small negative number:");
   stdin.get(i8);
  
   mov(i8,al);
   cbw();通过符号扩展将al中的字节扩展为ax中的字

   mov(ax,i16);
   cwde();通过符号扩展将ax中的字扩展为eax中的双字

   mov(eax,i32);
  
cwd()通过符号扩展,将ax中的字扩展为dx:ax中的双字

对于一般的符号扩展操作,mov变为movsx,movsx(source,dest)目的操作数的数据宽度必须大于元操作数,目的操作数必须是寄存器,movsx不接受常量操作数
4,移位和循环移位  
shl(count,dest)操作数count要么是常数,要么是cl
shr
sar算数右移
rol循环左移
ror循环右移
rcr带进位循环右移
rcl带进位循环左移
5,
  cld()消除方向标志(0)
  std()设置方向标志(1)
  cli()消除中断禁止标志
  sti()设置中断禁止标志
  clc()清除进位标志
  stc()设置进位标志
  cmc()将进位标志取反
  sahf()将ah寄存器存储到eflags寄存器低8位
  lahf()从标志寄存器的低8位加载ah

6,HLA中的字符字面常量可以采用两种形式表示:由单引号括起来的单个字符或者在#符号后面跟上数字常量
'A' #65  #$41 #%0100_0001
7,#符号不是通用的字符转换函数,不能放在寄存器或者变量名的前面,只能放在常量前面
8,通常情况上,将单引号括起来的字符字面常量,处理图形字符。用#括起来的格式处理控制字符
9,stdin.getc程序没有任何参数,他从标准输入缓冲区读入单个字符并将该字符返回给al寄存器                                                              10,stdin.getc()=stdin.get(c)
11,stdin.eoln()行尾            
             

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值