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()行尾