关闭

HLA高级汇编 进入高级汇编语言的世界 第一篇

标签: hla高级汇编
698人阅读 评论(0) 收藏 举报
分类:

成败成屡败兰兰白绿回百汇

1,HLA标识符以下划线,字母开头,后面接0个或多个字母,数字字符下划线,HLA标识符是区分大小写的,HLA不能声明只存在大小写差异的两个名称。

2,hellworld程序

program helloworld;

#include("stdlib.hhf")

begin helloworld;

stdout.put("helloworld, assembly of all world",nl);

end helloword;


3,静态变量的声明:

static:

   i8:    int8             :=0;

   i16:   int16         :=1600;

   i32:   int32          :=320000;

变量的声明通常在主程序开始之前

stdput.put允许有多个参数,如果指定了一个整形值,那么在输出时候,stdout.put会把这个值转换成它的   字符串  形式

stdin.get(i8)该语句从键盘读入一个值,把他转换成 i8 的形式,存储到i8中

4,HLA使用一个字节来表示布尔值,可以使用任何可以直接操作8位值的任何指令来处理他们。

5,基本指令: mov(源,目的)它只是复制,源操作数和目的操作数长度相同。。。                                      add(源,目的)  sub(源,目的)

6,if语法

if(表达式)then   。。。。。。 elseif(表达式)then 。。。。else。。。。endif

7,布尔操作时候的&&,||,!

操作符&&采用从左到右的方式求值,,,逻辑与操作符比逻辑或的优先级高,!操作符只能做寄存器或者布尔变量的前缀:不能作为更大表达式的一部分,,想要实现时得加括号,,,HLA也提供了&和|操作符 他们和&&,|||完全不同

8,while(表达式)do。。。。。。。endwhile

循环体执行完语句后,重新在执行直到表达式为false为止

9,for(式子)do。。。。。。endfor

10,repeat。。。。。until(表达式)

如果表达式为false,则重复循环

11,break  和breakif(表达式)

12,forever。。。endfor该语句创建了一个无限循环

forever

      stdout.put("enter a interger less than 10:");

      stdin.get(i);

      breakif(i<10);

      stdout.put("this value need less to 10",nl);

     endfor;

13,try .......exception.......endtry

如果try和第一个exception之间的语句(受保护的模块)在执行过程中没有出现问题,则直接执行endtry后面的.

保护程序,不接受错误用户的输入

repeat

   mov (false,goodinteger);

   try

     stdout.put("enter a integer:");

     stdin.get(i);

     mov (true,goodeinterfer);

     exception(ex.concersionerror);

     stdout.put("illegal numeric value,please re_enter,",nl);

     exception(ex.valueoutofrange);

     stdout.put("illegal numeric value,please re_enter,",nl);

     endtry;

 until(goodinteger);

 
excepts.hhf头文件提供了很多异常处理的情况。
http://tech.163.com/06/0328/10/2D9VS3U100091SBR.html

http://blog.sina.com.cn/s/blog_6b136940010129hl.html

14,stdout.newln向标准输出设备输出一个换行序列,在功能上于stdout.put(nl);等效

15,stdout.putiX将一个参数作为带符号的整数值输出

stdout.puti8(-123);

stdout.puti16(dx);

16,stdout.putiXSIZE将指定的值作为带符号整形常量输出到标准设备,但是指定域宽,和填充字符

stdout.puti8Size(value8,width,padchar);

width为负数则左对齐,不然右对齐,padchar是一个字符值,字符常量通常用单引号括起来

使用stdout.puti32Size以表列形式输出值

    program   haha

  #include("stdlib.hhf")

   var   

     i32:   int32;

    colcnt: int8;

begin   haha ;

    mov(96,i32);

    mov (0,colcnt);

    while(i32>0)do

         if(colcnt=8) then

         stdout.newln();

         mov(0,colcnt);

         endif;  

   stdout.puti32Size(i32,5,'  ');

   sub(1,i32);

   add(1,colcnt);

   endwhile();

 stdout.newln();

end haha;

17,使用stdout.put也可以输出时候指定域宽stdout.put(i32:5);但是不能指定填充字符,默认为空格字符

18,stdin.getc()从标准输入设备的输入缓冲区读取下一个字符,他将该字符返回给cpu的al寄存器、

19,stdin.getiX,分别从标准输入设备读取8位,16位,32位的带符号整形值,并将它们返回到al,ax,eax中

20,调用stdin.getc()或者stdin.geti32()样输入历程时,程序不必从用户那里读取数据,而是HLA从从用户那里读取一整行文本,并将输入内容存入缓冲区,对于输入历程会从缓冲区读取数据,知道缓冲区为空为止。

21,hla标准库提供了stdin.readLn(),stdin.flushIuput()可以控制标准输入缓冲区。stdin.radln()表示放弃输入缓冲区的内容,直接要求用户输入一行新的文本,stdin.flushinput()表示仅仅放弃缓冲区的内容。。。。通常在标准输入历程之前,,,而在标准输入之后调用stdin.flushinput();

22,stdin.get

stdin.get(intval,anotherintval);   stdin.get将输入数据直接存储到参数列表制定的参数列表中,它并不将值返回给寄存器,除非指定了一个寄存器作为参数。stdin.get参数必须是变量或寄存器

23,try..endtry产生异常存放在eax寄存器中,于exception中的异常ID进行比较

 

 

 




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:74553次
    • 积分:1330
    • 等级:
    • 排名:千里之外
    • 原创:49篇
    • 转载:84篇
    • 译文:0篇
    • 评论:3条
    最新评论