INT10H,INT12H,鼠标掩码

2001年04月26日 08:20:00

您当前的位置: 汇编工作室首页--<资料共享:

 

 

以下资料仅供参考: 

----------------------------------------------------------------------------------------

int 10H: int 10H,12H,鼠标掩码等资料

int 10HINOUT
AH=00 设置显示模式 ah=0 al=video mode 
AH=01 设置光标类型 ah=1 ch=start scan line cl=end scan line 
AH=02 设置光标位置ah=2 bh=display page dh=row dl=colax=0
AH=03 读取光标位置ah=3 bh=display pageax=0 ch=start scan line cl=end scan line dh=row dl=col
AH=04 读取光笔位置ah=4ah=pen trigger signal bx=pixel c1olumn ch=pixel row dh=character row dl=character coloumn 
AH=05 指定显示页ah=5 al=page number  
AH=06 初始化窗口,上滚窗口ah=6 al=lines to scroll up bh=blank line attribute ch=upper row cl=left column dh=lower row dl=right column  
AH=07 初始化窗口,下滚窗口 ah=7 al=lines to scroll down bh=blank line attribute ch=upper row cl=left column dh=lower row dl=right column   
AH=08 读字符及属性ah=8 bh=page number  ah=attribute al=character
AH=09 写字符及属性ah=9 al=character bh=page number bl=attribute cx=number of character to write  
AH=0A 当前光标处写字符ah=0AH al=character bh=page number cx=number of character to write  
AH=0B 设调色板ah=0BH bh=palette ID bl=color ID  
AH=0C 写像素ah=0CH al=color   
AH=0D 读像素ah=0DH bh=page number cx=pixel column dx=pixel row al=color
AH=0E 电传机方式写文本ah=0EH al=character bh=page number bl=foreground color  
AH=0F 取当前显示模式ah=0FH  ah=columns al=display modes bh=active page number
AH=10 设调色板寄存器ah=10H al=command bh=value bl=palette reg dx=offset of pointer to 17-byte table es=segment of pointer to 17-byte table bh=value
AH=11 字符生成器ah=11H al=command bp=offset of pointer to user table es=segment of pointer to user table   
AH=12 改变选择ah=12H bl=command   
AH=13 写字符串ah=13H al=mode bh=page number bl=attribute cx=character count dx=start cursor position bp=offset of pointer to string es=segment of pointer to string  
AH=1A 读显示码ah=1AH al=0  al=status bh=alternate disp code bl=active disp code
AH=1A 写显示码ah=1AH al=1 bh=alternate disp code bl=active disp code al=status
AH=1B 返回状态ah=1BH bx=implementation type di=offset of pointer to empty buffer es=segment of pointer to empty buffer al=status di=offset of pointer to video state buffer es=segment of pointer to video state buffer
AH=1C 返回保存/恢复ah=1CH al=0 cx=request states al=status bx=number 64-byte blocks for state
AH=1C 保存状态ah=1CH al=1 bx=offset of pointer to video state buffer cx=request states es=segment of pointer to video state buffer al=status
AH=1C 恢复状态ah=1CH al=2 bx=offset of pointer to video state buffer cx=request states es=segment of pointer to video state buffer al=status
AH=FE 取视频缓冲区ah=0FEH di=offset of physical video buffer es=segment of physical video buffer  di=offset of logical video buffer es=segment of logical video buffer
AH=FF 更新视频缓冲区ah=0FFH cx=number of characters modified di=offset to first character modified es=segment of logical video buffer  

 

 

int 12H: int 10H,12H,鼠标掩码等资料

取内存大小服务 ax=memory size

 

鼠标屏幕和光标掩码: int 10H,12H,鼠标掩码等资料

屏幕和光标掩码的作用效果:

Screen Mask BitCursor Mask BitResulting Screen Bit
000
001
10Unchanged
11Inverted

 

屏幕的字符数据:

Bit numberDescriptionComments
15Blink control1=blinking character
12-14Background color 
11Intensity control1=high intensity
8-10Foreground color 
0-7CharacterASCII value

 

加速曲线:

Part of table offset(decimal)Length(in bytes)Description
Curve lengths01number of counts/factors in first curve
11number of counts/factors in second curve
21number of counts/factors in third curve
31number of counts/factors in fourth curve
Mouse counts432array of counts for first curve
3632array of counts for second curve
6832array of counts for third curve
10032array of counts for fourth curve
Scale Factors13232array of scale factors for first curve
16432array of scale factors for second curve
19632array of scale factors for third curve
22832array of scale factors for fourth curve
Curve names26016ASCII string for first curve
27616ASCII string for second curve
29216ASCII string for third curve
30816ASCII string for fourth curve

int 10H,12H,鼠标掩码等资料

----------------------------------------------------------------------------------------

版权所有 (C) 1999-2000 汇编工作室 联系我们:bitstream@263.net

 



Trackback: http://tb.blog.youkuaiyun.com/TrackBack.aspx?PostId=3444


请仔细阅读和分析下面函数,进行优化后,采用C/C++11标准,完整推导并重构可编译的全部代码 要求如下: 1.保持所有原始功能不变,不要遗漏逻辑细节 2.提高执行效率,降低计算复杂度 3.已经给定的结构体名字和元素不要更改,详细的中文注释 4.自动添加中文注释说明功能逻辑 5.不使用 auto,使用显式 for 循环 6.结构体采用32位定义 7.不要使用小函数,保持原始的函数定义 8.严格保持protobuf字段映射关系 特别注意: 1.函数中有关位操作不变,函数间的位操作一致, 定义位域结构体并注释位操作 3.采用 google::protobuf::Descriptor 和 google::protobuf::Reflection 进行编程 4.函数中的 HDDMXng::TileType::TileType 映射为 message TileType { optional uint32 numarcs = 1; optional uint32 gidx = 2; optional uint32 numwires = 3; optional sint32 xmin = 4; optional sint32 xmax = 5; optional sint32 ymin = 6; optional sint32 ymax = 7; optional uint32 xgridextent = 8; optional uint32 ygridextent = 9; optional string gname = 10; optional string hwname = 11; repeated SiteChildDef sitechilddefs = 12; repeated sint32 sitepin2wire = 13 [packed = true]; optional uint32 numtileports = 14; optional uint32 transform = 15; optional string baseTypeName = 16; } message SiteChildDef { optional uint32 sitetype = 1; optional string sitename = 2; optional uint32 startpin = 3; optional uint32 deltarpmx = 4; optional uint32 deltarpmy = 5; } 5.函数中的 HDDMXng::TilePort::TilePort 映射为 message TilePort { optional uint32 edgeid = 1; optional uint32 faceid = 2; optional uint32 localid = 3; optional uint32 globalid = 4; optional sint32 wireid = 5; } 4. 将 _BYTE tileType_msg[16] 映射为 HDDMXng::TileType tileType_msg; 5. 将 __int64 *std_se 映射为 std::set<std::string> *std_set; void __fastcall HDDMTileType::writeme_pb(HDDMTileType *this, std::ostream *stream, __int16 isTilePort) { int tileType_code7_low; // ecx unsigned __int16 tileType_code; // ax int n0x7FFFFFFF; // ecx int v8; // eax int tileType_code3; // eax int tileType_code6_low; // edx unsigned __int8 v11; // al unsigned __int16 tileType_code1_high; // dx _QWORD *p_qword40; // rsi __int64 v14; // rax __int64 v15; // r12 __int64 v16; // r14 int v17; // esi google::protobuf::Arena *v18; // r13 HDDMXng::SiteChildDef *Aligned; // rax HDDMXng::SiteChildDef *Aligned_1; // rbx __int64 v21; // rax void *p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_4; // rdi int v23; // eax int v24; // edx int v25; // edx int v26; // edx int v27; // edx __int64 v28; // rsi _DWORD *v29; // rdx __int64 v30; // rcx int v31; // eax __int64 qword1D8; // rax __int64 v33; // rdx __int64 v34; // rbx __int64 v35; // r13 int v36; // r12d __int64 n4_6; // rax _QWORD *v38; // r14 int n4; // r15d google::protobuf::Arena *v40; // rsi unsigned __int64 v41; // rdx __int64 n4_4; // rax __int64 n4_2; // rcx __int64 v44; // r12 int v45; // ebx __int64 v46; // r12 int v47; // ebx google::protobuf::internal::RepeatedPtrFieldBase *v48; // rdi google::protobuf::internal::RepeatedPtrFieldBase *v49; // rbp unsigned __int16 ***v50; // rbx unsigned __int16 **v51; // r13 __int64 v52; // r14 unsigned __int16 *v53; // r15 int v54; // eax int v55; // edx int v56; // edx const google::protobuf::Message *v57; // rdx void **p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2; // rax void *v59; // rdi google::protobuf::internal::RepeatedPtrFieldBase *v61; // [rsp+10h] [rbp-128h] int n4_5; // [rsp+10h] [rbp-128h] google::protobuf::internal::RepeatedPtrFieldBase *v63; // [rsp+10h] [rbp-128h] void *v64; // [rsp+20h] [rbp-118h] BYREF google::protobuf::internal::RepeatedPtrFieldBase *v65; // [rsp+28h] [rbp-110h] __int64 v66; // [rsp+30h] [rbp-108h] void *v67[2]; // [rsp+40h] [rbp-F8h] BYREF void *v68; // [rsp+50h] [rbp-E8h] BYREF void *v69; // [rsp+58h] [rbp-E0h] int v70; // [rsp+60h] [rbp-D8h] int v71; // [rsp+64h] [rbp-D4h] int v72; // [rsp+68h] [rbp-D0h] _BYTE tiletype_msg[16]; // [rsp+70h] [rbp-C8h] BYREF int v74; // [rsp+80h] [rbp-B8h] google::protobuf::Arena *v75; // [rsp+88h] [rbp-B0h] BYREF int v76; // [rsp+90h] [rbp-A8h] int v77; // [rsp+94h] [rbp-A4h] _DWORD *v78; // [rsp+98h] [rbp-A0h] int n4_3; // [rsp+A0h] [rbp-98h] int n4_1; // [rsp+A4h] [rbp-94h] void *v81; // [rsp+A8h] [rbp-90h] void *p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx; // [rsp+B8h] [rbp-80h] BYREF void *p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_3; // [rsp+C0h] [rbp-78h] BYREF void **p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_1; // [rsp+C8h] [rbp-70h] BYREF int tileType_code_high; // [rsp+D0h] [rbp-68h] int v86; // [rsp+D4h] [rbp-64h] int tileType_code7_low_1; // [rsp+D8h] [rbp-60h] int n0x7FFFFFFF_1; // [rsp+DCh] [rbp-5Ch] int tileType_code3_1; // [rsp+E0h] [rbp-58h] int tileType_code4; // [rsp+E4h] [rbp-54h] int tileType_code5; // [rsp+E8h] [rbp-50h] int tileType_code6_low_1; // [rsp+ECh] [rbp-4Ch] int tileType_code6_high; // [rsp+F0h] [rbp-48h] int v94; // [rsp+F4h] [rbp-44h] int v95; // [rsp+F8h] [rbp-40h] if ( HDDMDeviceDump::useXngMarks ) std::ostream::write(stream, "TILETYPE", 8); HDDMXng::TileType::TileType((HDDMXng::TileType *)tiletype_msg); tileType_code7_low = LOWORD(this->tileType_code7); tileType_code_high = HIWORD(this->tileType_code); tileType_code = this->tileType_code; tileType_code7_low_1 = tileType_code7_low; n0x7FFFFFFF = this->tileType_code2; v86 = tileType_code >> 6; v8 = v74 | 0x38; if ( n0x7FFFFFFF != 0x7FFFFFFF ) { tileType_code3 = this->tileType_code3; n0x7FFFFFFF_1 = n0x7FFFFFFF; tileType_code3_1 = tileType_code3; tileType_code4 = this->tileType_code4; v8 = v74 | 0x3F8; tileType_code5 = this->tileType_code5; } tileType_code6_low = LOWORD(this->tileType_code6); v74 = v8 | 0xC01; tileType_code6_low_1 = tileType_code6_low; tileType_code6_high = HIWORD(this->tileType_code6); if ( p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx == &google::protobuf::internal::fixed_address_empty_string[abi:cxx11] ) sub_11C39D0(&p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx, &this->tileType_code8); else std::string::_M_assign(p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx, &this->tileType_code8); v11 = BYTE2(this->tileType_code1); if ( (v11 & 0xE) == 0 || (tileType_code1_high = HIWORD(this->tileType_code1), (tileType_code1_high & 0xFFF0) == 0xFFF0) || (HIWORD(this->tileType_code1) & 0xFFF0) == 0xA790 ) { v95 = 0; v74 |= 0x2004u; if ( p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_1 == (void **)&google::protobuf::internal::fixed_address_empty_string[abi:cxx11] ) sub_11C39D0(&p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_1, &this->tileType_code8); else std::string::_M_assign(p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_1, &this->tileType_code8); } else { v74 |= 0x2000u; v95 = (v11 >> 1) & 7; HDDMTileType::getTileTypeName[abi:cxx11](v67, tileType_code1_high >> 4); v74 |= 4u; if ( p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_1 == (void **)&google::protobuf::internal::fixed_address_empty_string[abi:cxx11] ) { p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2 = (void **)operator new(0x20u); *p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2 = p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2 + 2; if ( v67[0] == &v68 ) { v59 = v69; p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2[2] = v68; p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2[3] = v59; } else { *p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2 = v67[0]; p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2[2] = v68; } p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_1 = p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2; p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_2[1] = v67[1]; } else { std::string::operator=(p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_1, v67); if ( v67[0] != &v68 ) { operator delete(v67[0]); if ( !this->qword48 ) goto LABEL_18; goto LABEL_13; } } } if ( !this->qword48 ) goto LABEL_18; LABEL_13: v74 |= 2u; p_qword40 = &this->qword40; if ( p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_3 == &google::protobuf::internal::fixed_address_empty_string[abi:cxx11] ) sub_11C39D0(&p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_3, p_qword40); else std::string::_M_assign(p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_3, p_qword40); LABEL_18: v64 = 0; v65 = 0; v66 = 0; if ( isTilePort ) { HDDMTileType::getAllTilePorts(this, &v64); if ( v65 != v64 ) { v74 |= 0x1000u; v94 = (v65 - (google::protobuf::internal::RepeatedPtrFieldBase *)v64) >> 3; } } v14 = (__int64)(this->qwordB0 - this->qwordA8) >> 3; if ( (_WORD)v14 ) { v15 = 0; v16 = 2LL * ((unsigned int)(unsigned __int16)v14 - 1) + 2; while ( 1 ) { v29 = v78; v17 = v77; if ( !v78 ) goto LABEL_34; v30 = v76; v31 = *v78; if ( v76 >= *v78 ) break; ++v76; Aligned_1 = *(HDDMXng::SiteChildDef **)&v78[2 * v30 + 2]; LABEL_29: p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_4 = (void *)*((_QWORD *)Aligned_1 + 3); v23 = *((_DWORD *)Aligned_1 + 4); v24 = *(_WORD *)(*(_QWORD *)(this->qwordA8 + 4 * v15) + 16LL) & 0x3FF; *((_DWORD *)Aligned_1 + 4) = v23 | 2; *((_DWORD *)Aligned_1 + 8) = v24; v25 = *(unsigned __int16 *)(this->qwordC0 + v15); *((_DWORD *)Aligned_1 + 4) = v23 | 6; *((_DWORD *)Aligned_1 + 9) = v25; v26 = *(__int16 *)(this->qwordF0 + 2 * v15); *((_DWORD *)Aligned_1 + 4) = v23 | 0xE; *((_DWORD *)Aligned_1 + 10) = v26; v27 = *(__int16 *)(this->qwordF0 + 2 * v15 + 2); *((_DWORD *)Aligned_1 + 4) = v23 | 0x1E; *((_DWORD *)Aligned_1 + 11) = v27; v28 = this->qwordD8 + 16 * v15; *((_DWORD *)Aligned_1 + 4) = v23 | 0x1F; if ( p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_4 == &google::protobuf::internal::fixed_address_empty_string[abi:cxx11] ) { sub_11C39D0((char *)Aligned_1 + 24, v28); v15 += 2; if ( v16 == v15 ) goto LABEL_36; } else { std::string::_M_assign(p__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx_4, v28); v15 += 2; if ( v16 == v15 ) goto LABEL_36; } } v17 = v77; if ( v31 == v77 ) { LABEL_34: google::protobuf::internal::RepeatedPtrFieldBase::Reserve( (google::protobuf::internal::RepeatedPtrFieldBase *)&v75, v17 + 1); v29 = v78; v31 = *v78; } *v29 = v31 + 1; v18 = v75; if ( v75 ) { Aligned = (HDDMXng::SiteChildDef *)google::protobuf::Arena::AllocateAligned( v75, (const type_info *)&`typeinfo for'HDDMXng::SiteChildDef, 0x30u); Aligned_1 = Aligned; if ( Aligned ) HDDMXng::SiteChildDef::SiteChildDef(Aligned); google::protobuf::Arena::AddListNode( v18, Aligned_1, (void (*)(void *))google::protobuf::internal::arena_destruct_object<HDDMXng::SiteChildDef>); } else { Aligned_1 = (HDDMXng::SiteChildDef *)operator new(0x30u); HDDMXng::SiteChildDef::SiteChildDef(Aligned_1); } v21 = v76++; *(_QWORD *)&v78[2 * v21 + 2] = Aligned_1; goto LABEL_29; } LABEL_36: qword1D8 = this->qword1D8; v33 = (this->qword1E0 - qword1D8) >> 1; if ( (_WORD)v33 ) { v34 = 0; v35 = 2LL * ((unsigned int)(unsigned __int16)v33 - 1) + 2; while ( 1 ) { v36 = *(unsigned __int16 *)(qword1D8 + v34); n4_6 = n4_3; if ( n4_3 != n4_1 ) goto LABEL_38; v38 = v81; n4 = n4_3 + 1; if ( v81 ) { v40 = *(google::protobuf::Arena **)v81; if ( 2 * n4_3 >= n4 ) n4 = 2 * n4_3; v61 = *(google::protobuf::internal::RepeatedPtrFieldBase **)v81; if ( n4 < 4 ) n4 = 4; v41 = 4LL * n4 + 8; if ( v40 ) { v81 = (void *)google::protobuf::Arena::AllocateAligned(v40, (const type_info *)&`typeinfo for'char, v41); *(_QWORD *)v81 = v61; n4_4 = n4_3; n4_2 = n4_1; n4_1 = n4; if ( n4_3 <= 0 ) goto LABEL_50; LABEL_48: n4_5 = n4_2; memcpy((char *)v81 + 8, v38 + 1, 4 * n4_4); n4_2 = n4_5; goto LABEL_49; } } else { if ( 2 * n4_3 >= n4 ) n4 = 2 * n4_3; if ( n4 < 4 ) n4 = 4; v41 = 4LL * n4 + 8; } v81 = (void *)operator new(v41); *(_QWORD *)v81 = 0; n4_4 = n4_3; n4_2 = n4_1; n4_1 = n4; if ( n4_3 > 0 ) goto LABEL_48; LABEL_49: if ( v38 ) { LABEL_50: if ( !*v38 ) operator delete(v38, 4 * n4_2 + 8); } n4_6 = n4_3; LABEL_38: v34 += 2; n4_3 = n4_6 + 1; v33 = (__int64)v81; *((_DWORD *)v81 + n4_6 + 2) = v36; if ( v35 == v34 ) break; qword1D8 = this->qword1D8; } } HDDMDevice::writeMessage((HDDMDevice *)stream, (std::ostream *)tiletype_msg, (const google::protobuf::Message *)v33); v44 = 0; v45 = 0; if ( LOWORD(this->tileType_code7) ) { do { HDDMWire::writeme_pb(this->qword110 + v44, (HDDMTileType *)stream); ++v45; v44 += 112; } while ( LOWORD(this->tileType_code7) > v45 ); } v46 = 0; v47 = 0; if ( HIWORD(this->tileType_code) ) { do { HDDMArc::writeme_pb(this->qword108 + v46, (HDDMTileType *)stream); ++v47; v46 += 24; } while ( HIWORD(this->tileType_code) > v47 ); } v48 = (google::protobuf::internal::RepeatedPtrFieldBase *)v64; v63 = v65; if ( v65 != v64 ) { if ( !HDDMDeviceDump::useXngMarks || (std::ostream::write(stream, "PORTS", 5), v48 = (google::protobuf::internal::RepeatedPtrFieldBase *)v64, v63 = v65, v65 != v64) ) { v49 = v48; do { v50 = *(unsigned __int16 ****)v49; v51 = **(unsigned __int16 ****)v49; v52 = *(_QWORD *)(*(_QWORD *)v49 + 16LL); v53 = *v51; HDDMXng::TilePort::TilePort((HDDMXng::TilePort *)v67); v54 = (int)v68; LODWORD(v69) = *v53; LODWORD(v68) = (unsigned int)v68 | 1; v55 = *((unsigned __int16 *)v51 + 4); LODWORD(v68) = v54 | 3; HIDWORD(v69) = v55; v56 = *((_DWORD *)v50 + 2); LODWORD(v68) = v54 | 7; v70 = v56; v57 = (const google::protobuf::Message *)*((unsigned int *)v50 + 3); LODWORD(v68) = v54 | 0xF; v71 = (int)v57; if ( v52 ) { v57 = (const google::protobuf::Message *)*(unsigned __int16 *)(v52 + 10); LODWORD(v68) = v54 | 0x1F; v72 = (int)v57; } HDDMDevice::writeMessage((HDDMDevice *)stream, (std::ostream *)v67, v57); v49 = (google::protobuf::internal::RepeatedPtrFieldBase *)((char *)v49 + 8); HDDMXng::TilePort::~TilePort((HDDMXng::TilePort *)v67); } while ( v63 != v49 ); v48 = (google::protobuf::internal::RepeatedPtrFieldBase *)v64; } } if ( v48 ) operator delete(v48); HDDMXng::TileType::~TileType((HDDMXng::TileType *)tiletype_msg); }
最新发布
11-05
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值