本文主要是介绍Intel8086处理器使用NASM汇编语言实现操作系统04-实模式-屏幕显示不定长度的字符串(cmp/je),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本示例遇到的新汇编指令cmp,je
cmp正确写法
cmp eax,666 ;用eax里的值减去666,如果值为0,则将ZR(ZF)标志位=1;如果发生借位或进位,CF(CY)标志位=1;如果溢出,则OF(OV)标志位=1
cmp eax,ebx
cmp byte [123], 123
cmp错误写法
cmp 123,123 ;操作数不可以都是立即数
cmp [0x7c00],[0x7c01] ;操作数不可以都是内存地址
cmp [0x7c00], 666 ;操作数不知道有多长
je正确写法
;标号跳转
there:
cmp byte [si], 0x01 ;不要忘记了si默认使用ds段寄存器
je there ;如果ZF=1,则跳转到there标号处执行
;寄存器跳转
je eax ;直接跳转到物理地址,与段寄存器无关
本文演示定义一个字符串,然后循环取出字符串的每个字符,依次放到显存(0xb8000开始)中
mov ax,0xb800 ;设置ds/si组合,表示显存的段和偏移
mov ds,ax
mov si,0x0mov ax,0x7c0 ;设置es/bx组合,用来表示字符串
mov es,axmov bx,string ;bx是字符串起始地址print:mov dl,[es:bx] ;将bx地址中的字符串放到dl中
cmp dl,0 ;判断字符串内容是否是0
je do_not_stop ;如果0就结束,直接跳走了,否则就将内容显示到屏幕上
mov byte [si],dl
inc si
mov byte [si],0bH
inc si
inc bx
jmp print
string db 'Hello World!!I Love Rabbit'
stringend db 0x00
do_not_stop:jmp do_not_stop ;执行无限循环
times 510-($-$$) db 0hdw 0AA55H
这篇关于Intel8086处理器使用NASM汇编语言实现操作系统04-实模式-屏幕显示不定长度的字符串(cmp/je)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!