汇编语言一个地址几个字节
x86 CPU 可以执行 16 位数的指令,也可以执行 8 位数的指令。
指令中,如果不说明白位数是多少,CPU 就不干了。
--------MOV CX, 200INC AL这种指令,使用了寄存器,这就非常清楚的说明了位数。
--------mov ds:[0],1 ,这种指令,使用了存储器。
而对于存储器,可以进行两个字节、也可以进行一个字节的传送。
这条指令,究竟是多少位的?这就让 CPU 糊涂了。
必须写成:mov word ptr ds:[0],1,加上了《word ptr》,就是《字属性》,就是16位数的传送。
汇编语言每个指令的字节数是多少?
我去,你怎么把题目改了!!刚把程序从db改成dw,你又改回db db类型的你参考我以前回答别人一个题目吧。
https://zhidao.baidu.com/question/1112674821933353739.html?entry=qb_uhome_tag;cal32.asm data segment x dw 00H, 01h, 02h, 03h, 04h, 05h, 06h, 07h, 08h, 09h, 0Ah, 0Bh, 0Ch, 0Dh, 0Eh, 0Fh, 010H, 011H, 012H, 013H, 014H, 015H, 016H, 017h, 018h, 019h, 01ah, 01bh, 01ch, 01dh, 01eh, 01fh y dw 0e0h, 0e1h, 0e2h, 0e3h, 0e4h, 0e5h, 0e6h, 0e7h, 0e8h, 0e9h, 0eah, 0ebh, 0ech, 0edh, 0eeh, 0efh, 0f0h, 0f1h, 0f2h, 0f3h, 0f4h, 0f5h, 0f6h, 0f7h, 0f8h, 0f9h, 0fah, 0fbh, 0fch, 0fdh, 0feh, 0ffh z dw 32 dup (0) numlen dw 32 ; number's numlen -- const hextab db '0123456789ABCDEF' data ends code segment assume cs:code, ds:data start: mov ax, data mov ds, ax ;add lea si, x lea di, y lea bx, z call __add lea si, z call __printhex32 ; substract lea si, x lea di, y lea bx, z call __sub lea si, z call __printhex32 mov ah,4ch int 21h; calculate (bx)=(si) + (di); si, di, bx - 32 word __add proc near mov cx, numlen _a0: mov ax, [si] adc ax, [di] mov [bx], ax add si,2 add di,2 add bx,2 loop _a0 ret __add endp; calculate (bx)=(si) - (di); si, di, bx - 32 word __sub proc near mov cx, numlen _s0: mov ax,[si] sbb ax,[di] mov [bx], ax add si, 2 add di, 2 add bx, 2 loop _s0 ret __sub endp;print [si] - 32 word;with hex __printhex32 proc near mov cx, numlen add si, cx add si, cx sub si, 2 _p0: mov dx, [si] call __printhex sub si, 2 loop _p0 mov al,0Dh int 10h mov al,0Ah int 10h ret __printhex32 endp;print number in (dx) __printhex proc near push dx push cx push bx lea bx, hextab mov cx,0404h mov ah,0eh _ph0: rol dx, cl mov al, dl and al,0Fh xlat int 10h dec ch jnz _ph0 mov al, 20h int 10h pop bx pop cx pop dx ret __printhex endp code ends end start
汇编语言一个地址几个字节
CBW指令将AL的最高有效位扩展至AH,即:如果AL的最高有效位是0,则AH = 00;AL的最高有效位为1,则AH = FFH。
AL不变,如al中的值是0F0H,cbw后,ax中的值是0FFF0H,而mov ax,word ptr buf,是把以buf为地址的两个字节,存入ax,如:buf db 30H,50H,70Hmov ax,word ptr buf后,ax的值是5030H
汇编语言四字节数加法
data segmentdata1 dd 01020304Hdata2 dd 0A0B0C0DHdata3 dd 0 ; save resultdata endscode segmentassume cs:code, ds:datastart:mov ax, datamov ds, axmov ax, word ptr data1mov dx, word ptr data1+2add ax, word ptr data2adc dx, word ptr data2+2mov word ptr data3, axmov word ptr data3+2, dxmov ah,4chint 21hcode endsend start
汇编语言实现1,2,4个字节的数据求和存放在内存中
dseg segmentd0 db 1 ;1byted1 db 2d2 db 0dd0 dw 1 ;2bytedd1 dw 2dd2 dw 0qd0 dd 1 ;4byteqd1 dd 2qd2 dd 0dseg endsassume cs:cseg, ds:dsegcseg segmentstart:mov ax, dsegmov ds, ax;1bytemov al,d0add al,d1 ; d0+d1mov d2,al ; save to d2;2 bytemov ax, dd0add ax, dd1mov dd2, ax;4byte mov ax, word ptr qd0 ;低位数据在低地址,高位数据在高地址add ax, word ptr qd1 ;低位数据相加mov word ptr qd2, ax ;保存到qd2的低位mov ax, word ptr qd0+2 ;高位adc ax, word ptr qd1+2 ;高位相加,再加上低位相加时,有可能的进位mov word ptr qd2+2, ax ;保存高位。
如果高位相加有进位,这里未处理mov ax,4c00hint 21hcseg endsend start
汇编语言 (1)实现两个256位(32个字节)整数的加运算 (2)实现...
01ah, 01bh;0eeh, 0efh;05h, 09h;di inc bx loop _a0 jnc _a1 mov flag;db : mov al; 018h, 019h, : ret__sub 0f6h, 0f7h;32 ofmsg mov , 0e2h, 0e3h;flag, 1 jz 0ech, 0edh, , _a0;06h, , __sub test flag;ax lea si; z call __add test dup (0)flag ,4ch int + (di);flag, 1_s1;proc x lea _s1 mov 0Fh;[si] adc al, 0Bh, cx, 32_s0: mov (bx)=(si) - 0e0h, 0e1h;21h;near mov cx;02h, next0 lea , calculate (bx)=(si) si, x lea di;[di] mov [bx];_s0 jnc 07h; endscode db 0e8h, 0e9h, :code, ds;segmentx 01ch, 01dh;0feh, 0ffhz 1 jz next1 lea dx, bx loop 0e4h, 0e5h;result ,所以改用32个db类型的数据表示了;si inc di inc ,1_a1: ret __add 012H, 013H; 0f2h, 0f3h, , , , , [bx], al inc , 0dh, 0ah, 'al,[di] mov , 。
同样遵循x86体系数据表示, , , 0Ah, , y lea , db al,[si] sbb , 0Dh;016H, 017h;db data mov ds;'The , :datastart;8个dd数据,发现代码要比用db类型的麻烦得多;0fch, 0fdh;$'byte__sub proc near mov dx, ofmsg mov ah;01eh, 01fhy  : mov ax;segmentassume cs;014H, 015H, 0f0h, 0f1h;di, bx - 0Eh;010H, 011H;bx, z call , overflowed!'0f8h, 0f9h, , (di); si, 32  , endp; calculate al inc si inc ,01fh是最高位。
如果最高位有进位/借位产生,则视为溢出,会提示;用16进制打印好办,从高往低打就行了, , 0eah, 0ebh, , db 03h;04h;0Ch;00H;- 32 byte__add , , 1 -- overflowofmsg bx 0fah, 0fbh;0f4h, 0f5h, si, di: mov ah;data :低位在前,高位在后的原则,代码中x的数据,00是最低位;ah,9 int 21hnext1, 一开始想用 , ,但用10进制打印没想好怎么做。
好在你没这需求;cal32.asmdata di, y lea bx;0e6h, 0e7h, , ,9 int 08h, endpcode , , 32 , , 21hnext0: lea , is 0 , 01h
汇编语言可以比较半个字节的大小吗
可以的,将另外半个字节清0就可以了。
如果比较高四位,那么高低四位交换就可以。
比如:比较A,B的低四位大小:ANL A,#0F0HXCH A,BANL A,#0F0HXCH A,BCJNE A,B,NXTNXT:RET ;现在C的状态就可以确定A,B两个低四位大小了。
转载请注明出处51数据库 » 汇编语言word几个字节
雘籭檷墢欛