1、AL=12h 1 0 1 AL=0afhAL=00hAL=0ffh 1 AL=00h7 W=X+Y+24-Z8(1)ADD DX,BX (2)ADD AL,BX+SI (3)ADD BX+0B2H,CX (4)ADD WORD PTR 0520H,3412H (5)ADD AL,0A0H 2.9;为了避免与操作数地址混淆,将题中X,Y,Z,V 字操作数改为A,B,C,D mov ax,Xax=A imul Ydx,ax = AB (将操作数看作符号数,以下同) mov cx,ax mov bx,dxbx,ax - dx,ax =A*B mov ax,Zax = C cwddx,ax =C(扩展
2、符号后为双字) add cx,ax adc bx,dxbx,cx bx,cx+dx,ax=AB+C sub cx,540 sbb bx,0;bx,cx DI,转到above执行 cmp dx,di ja abovejnbe above (2)若AX SI,转到greater执行 cmp ax,si jg greaterjnle greater (3)若CX = 0,转到zero执行 cmp cx,0 jcxz zero jz zero(4)若AXSI产生溢出,转到overflow执行; cmp ax,di jo overflow (5)若SIAX,转到less_eq执行; cmp si,ax
3、cmp ax,si jle less_eq jge less_eq (6)若DIDX,转到below_eq执行。 cmp di,dx cmp dx,di jbe below_eq jae below_eq25; 答:将首地址为array得20个字的数组求和,并将结果存入 total 单元中。26; mov si,0 mov dl,stringsi第1个字符送dl寄存器 mov si,5 mov dh,stringsi第6个字符送dh寄存器 xor si,sisi清零 mov al,buffersi第一字节 inc si mov ah,buffersi第二字节 mov cl,4 shl ah,c
4、lBCD码移到高半字节 or al,ah组合成压缩BCD码 mov dl,al存入dl寄. mov al,buffersi第三字节 mov ah,buffersi第四字节 shl ah,cl or al,ah mov dh,al存入dh寄. (3) test dx,0f000h jz zero mov ax,-1 jmp done zero: mov ax,0 done: ret (4) lea bx,buffer1 lea dx,buffer2 mov cx,88个字节 si=0 clcCF=0 (5) mov ax,0b800h mov ds,ax段地址 地址偏移量si=0 xor dx,
5、dx和的高字dx=0 mov cx,99加的次数 mov ax,si第一个数 again: inc si指向下一个字单元 add ax,si加下一个数 jnc noc无进位转 inc dx有进位dx=dx+1 noc: dec cx次数-1 jnz cx,again非0继续加(6) mov si,offset string mov cx,8000h32k=215=8000h cmp si, jnz next mov si,20hif si=$ si- next: loop again (7) si0 mov cx,100循环次数 dec arraysi dec cx jnz again (8)
6、 xor si,sisi-0 coun: cmp stringsi,$ je done jmp coun ret。27; (1)使CF0 : and ax,axor ax,ax (2)使AX0 : xor ax,ax and ax,0mov ax,0 (3)同时使AX0和CF0: and ax,0 ;xor ax,ax ;sub ax,ax29; 压缩BCD码加法:AXAXBX 出口参数:AXBCD码和2.34; okmsg db OK, $errmsg db Error ! Overflow !, $ mov ax,X sub ax,Y mov dx,offset okmsg jmp nex
7、t overflow: mov dx,errmsg next: mov ah,9 int 21h 错误: mov ax,X mov dx,offset okmsg db OK, mov dx,errmsg错误1:数据定义在代码中 mov ah,9 errmsg db Error !, $ mov dx,errmsg 错误2:缺少JMP指令 2.37;xt237.asmmodel smallstack.dataarray db 255db 0array1 db 255 dup()array2 db 0dh,0ah, code.startupmov ah,0ah 键盘输入字符串mov dx,off
8、set arrayint 21hmov dx,offset array2 ; 回车换行mov ah,09hmov bx,offset array1 mov al,bxcmp al,jz donecmp al,a 小于a和大于z的字符不是小写字母jb nextcmp al,zja nextsub al,20h 在a和z之间的字符才是小写字母,转换为大写mov bx,al 保存到原位置 inc bxjmp againdone: mov dx,offset array1mov ah,09hexit 0end第三章(01) 3.1; 硬指令:每个硬指令就是一个处理器指令,在CPU执行时产生相应功能;伪
9、指令:伪指令并不产生处理器指令,它通常用于辅助汇编程序对源程序进行汇编。3.2;3.5; 编辑文本编辑程序汇编语言源程序.asm 汇编汇编程序目标模块文件.obj 连接连接程序可执行文件.exe或。com 调试调试程序应用程序6;xt236。asm简化段定义格式 .model small ;定义程序的存储模式(小模式) 。stack定义堆栈段(默认1024个字节) .data定义数据段 str1 ab Input Number:09 : ,0dh,0ah,$str2 ab Error!,0dh,0ah,$ .cade定义代码段startup说明程序的起始点,建立ds,ss的内容。 mov ah
10、,09h显示str1字符串 mov dx,offset str1 gtekey: mov ah,1调用BIOS判断按键功能 int 16h jz getkey如 zf = 0,无键按下,等待 cmp al,0有键按下,键值与0比较 jb error如 0,出错处理 cmp al, 9 有键按下,键值与 9比较 ja error如 9,出错处理 mov ah,02h调用DOS显示字符功能,显示该数字 mov dl,al .exit 0终止程序执行,返回DOS error: 出错,调用DOS 功能显示str2字符串 mov dx,offset str2 jmp getkey等待按键 end 汇编结
11、束7;xt307。asm segment dw 512 dup(?) endsdata segmentarray1 db 255 dup($)array2 db 0dh,0ah, data endscode segment codeassume cs:code, ds:data, ss:start: mov ax,data mov ds,ax mov ah,0ahmov dx,offset array2 ;mov bx,offset array1 mov al,bxcmp al,cmp al,zsub al,20hmov bx,aldone: mov dx,offset array1mov ax,4c00hcode endsend start9; (1)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1