汇编刚学寻址方式时的作业,提供一个99乘法表,要求查出其中错误位置的行号和列号,代码共享下:assume ds:datasg,cs:codesg datasg segment db 7,2,3,4,5,6,7,8,9 ;错误的乘法表格 db 2,4,7,8,10,12,14,16,18 db 3,6,9,12,15,18,21,24,27 db 4,8,12,16,7,24,28,32,26 db 5,10,15,20,25,30,35,40,45 db 6,12,18,24,30,7,42,48,54 db 7,14,21,28,35,42,49,56,63 db 8,16,24,32,40,48,56,7,72 db 9,18,27,36,45,54,63,72,81 db 1,2,3,4,5,6,7,8,9 ;供校对的表格 db 2,4,6,8,10,12,14,16,18 db 3,6,9,12,15,18,21,24,27 db 4,8,12,16,20,24,28,32,26 db 5,10,15,20,25,30,35,40,45 db 6,12,18,24,30,25,42,48,54 db 7,14,21,28,35,42,49,56,63 db 8,16,24,32,40,48,56,64,72 db 9,18,27,36,45,54,63,72,81 State db '**************************************************',0dh,0ah db '|| First: Check 9*9 multiple table ||',0dh,0ah db '|| By Zhong Dian #092978 ||',0dh,0ah db '**************************************************',0dh,0ah,'$' ;程序声明 firstline db 'x',20h,'y',0dh,0ah,'$' ;??:20h:输出空格吗?0dh,0ah:输出换行符吗? blank db ' ','$' error db 20h,'error',0dh,0ah,'$' finish db 0dh,0ah,'Accomplish!','$' datasg ends codesg segment main: mov ax, datasg mov ds,ax mov cx,9 ;循环9次 mov bx,0 lea dx, State ;声明行 mov ah,9h int 21h lea dx, firstline ;在第一行中输出x,y mov ah,9h int 21h mov si,1h s: push cx ;将外层循环的结束标志压栈 mov cx,9h mov di,1h s0: ;用双循环来判断两个表格相应位置是否一致 mov al,[bx] mov ah,[bx+51h] inc bx cmp al,ah ;将两个表相应位置的数据分别移到al,ah中,加以比较 je S1 add di,30h ;0-9数字表示的位置转化成acsii码输出 add si,30h mov dx,si ;用si输出行数 mov ah,2h int 21h lea dx,blank ;输出空格 mov ah,9h int 21h mov dx,di ;用di输出行数 mov ah,2h int 21h lea dx,error ;输出"error"信息 mov ah,9h int 21h sub di,30h ;回复行号和列行 sub si,30h S1: inc di ;扫描下一列 loop s0 pop cx ;返还cx值,扫描下一行 inc si loop s lea dx,finish ;输出表明程序结束 mov ah,9h int 21h mov ax,4c00h ;回到DOS int 21h codesg ends end main