data segment abc dd 9ABCDEF0h def dd 12345678h ghi dw ? data ends code segment assume cs:code, ds:data start: mov ax,data mov ds,ax mov dl,00h mov ax, word ptr abc mov bx, word ptr def sub ax,bx mov word ptr ghi,ax mov ax, word ptr abc+2 mov bx, word ptr def+2 sbb ax,bx mov word ptr ghi+2,ax jnc move inc dl move: mov byte ptr ghi+4,dl int 3 code ends end start
Output
C:\TASM>masm an32sub.asm Microsoft (R) Macro Assembler Version 5.00 Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved. Object filename [an32sub.OBJ]: Source listing [NUL.LST]: Cross-reference [NUL.CRF]: 50288 + 450368 Bytes symbol space free 0 Warning Errors 0 Severe Errors C:\TASM>link an32sub.obj Microsoft (R) Overlay Linker Version 3.60 Copyright (C) Microsoft Corp 1983-1987. All rights reserved. Run File [AN32SUB.EXE]: List File [NUL.MAP]: Libraries [.LIB]: LINK : warning L4021: no stack segment C:\TASM>debug an32sub.exe -g AX=8888 BX=1234 CX=0038 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=0B97 ES=0B87 SS=0B97 CS=0B98 IP=0027 NV UP EI NG NZ NA PE NC 0B98:0027 CC INT 3 -d 0B97:0000 0B97:0000 F0 DE BC 9A 78 56 34 12-78 88 88 88 00 00 00 00 ....xV4.x....... 0B97:0010 B8 97 0B 8E D8 B2 00 A1-00 00 8B 1E 04 00 2B C3 ..............+. 0B97:0020 A3 08 00 A1 02 00 8B 1E-06 00 1B C3 A3 0A 00 73 ...............s 0B97:0030 02 FE C2 88 16 0C 00 CC-63 83 C4 06 FF 36 24 21 ........c....6$! 0B97:0040 B8 0A 00 50 E8 47 5E 83-C4 04 5E 8B E5 5D C3 90 ...P.G^...^..].. 0B97:0050 55 8B EC 81 EC 84 00 C4-5E 04 26 80 7F 0A 00 74 U.......^.&....t 0B97:0060 3E 8B 46 08 8B 56 0A 89-46 FC 89 56 FE C4 5E FC >.F..V..F..V..^. 0B97:0070 26 8A 47 0C 2A E4 40 50-8B C3 05 0C 00 52 50 E8 &.G.*[email protected]. -q
Thank you!!
Doesn’t work in the case of smaller number – larger number:
; 32 bit subtraction
; _______________
assume cs:code, ds:data
data segment
opr1 dd 0ffffffffh
opr2 dd 00000001h
res dd 00000000h
car db 00h
data ends
code segment
org 0100h
start: mov ax, data
mov ds, ax
mov ch, 00h
mov ax, word ptr opr1
mov bx, word ptr opr2
sub ax, bx
jnc here1
neg ax
here1: mov word ptr res, ax
mov ax, word ptr opr1 + 2
mov bx, word ptr opr2 + 2
sbb ax, bx
jnc here2
neg ax
inc ch
here2: mov word ptr res+2, ax
mov byte ptr res+4, ch
mov ah, 4ch
int 21h
code ends
end start