RARS,即RISC-V汇编程序、模拟器和运行时,将汇编和模拟RISC-V汇编语言程序的执行。它的主要目标是为开始使用RISC-V的人们提供一个有效的开发环境,创建HelloWorld我们无法访问C标准库,所以让turnputs调用write(fd,buffer,len)直接映射到Linux系统调用,并且让我们将字符串的定义提升到一个全局变量中,因为汇编语言不允许字符串作为参数。

;*******************.modelsmall.codestart:pushdssubax,axpushaxret采用上述方法返回DOS,条件是先要定义“远过程”。楼主忽略了这个,所以只能在“段内”进行返回,不能在“段间”返回,就不能回到DOS状态。ret是子程序返回,与call指令一一对应的,返回时程序跳到call的下一条指令。

classSum{inti;charc;public:Sum(){i1;ca;}voidprint(){cout<3、汇编call指令:
callwordptr?]是段内调用,只是先把当前指令的下一条指令的ip压栈,然后将?]下的内容给ip,然后继续执行.在压栈时是spsp2,ss:[sp]压栈的ip值.calldwordptr?]是段间调用,只是先把当前的cs压栈,然后将指令的下一条指令的ip压栈,然后将?]下的内容给ip, 2]的内容给cs,然后继续执行.这里是spsp2;ss:[sp]压栈的cs,
问题在于没弄清楚1.call指令2.dword,word。两段代码差别在于第一段的call后面是wordptrds:[0],而第二段是dword,首先call会把返回地址压栈,导致栈顶指针sp减小,减少量由地址长度定。然后第一段代码压的是word,16位的地址,于是sp2,第二段dword,32位地址故sp4。